2014-09-24 123 views
1

我是django的初學者,我安裝了芹菜。芹菜工作流程

如果排隊的作品是同步處理或異步處理的,我對芹菜的工作感到困惑。當排隊的作業正在處理中時,其他作品是否可以排隊?

回答

2

Celery是一個任務排隊系統,由消息隊列系統支持,Celery允許您以不會阻塞任務完成的進程的方式異步調用任務,您可以等待任務完成使用AsyncResult.get

其他任務可以在任務正在處理時排隊,如果Celery運行多個進程/線程(這是默認情況),任務將相互並行執行。

您有責任確保相關任務以正確的順序執行,例如,如果任務A的輸出是其他任務B的輸入,那麼在開始任務B之前,您應該確保從任務A獲得結果。

從Celery文檔中閱讀Avoid launching synchronous subtasks

1

我想你可能會對芹菜做些什麼感到困惑。

芹菜並不真正負責排隊。這由隊列本身來處理 - RabbitMQ,Redis或其他。 Celery在這方面涉及的唯一方式就像在應用程序中調用的庫,以便將任務序列化爲適合放入隊列的任務。由於這是由您的Web應用程序完成的,因此它與您的應用程序本身完全同步或異步:通常,在生產中,您將有多個進程運行您的站點,這些進程中的每一個都可以同時將所有內容放入隊列中,但每個隊列行動在過程中完成。

芹菜的要點是單獨的工人過程。這是異步位的來源:工作人員完全獨立於您的Web應用程序運行,並根據需要從隊列中選擇任務。他們根本不參與將任務放到隊列中的過程。