2016-09-16 150 views
2

如何運行所有芹菜任務沒有工人,我的意思是直接打電話? 我可以使用TaskName.run()調用任務,但是我想在配置中編寫它,所以如何使它成爲可能?沒有工人運行芹菜任務

回答

4

只需將CELERY_ALWAYS_EAGER設置爲true,這將強制芹菜不排隊任務並在當前進程中同步運行它們。

如果你希望能夠做到這一點每個特定的任務,你可以用運行它們適用()的run()如你所提到的,而不是用apply_async()延遲運行它們()

所以TL;博士:

CELERY_ALWAYS_EAGER = True 
# The following two would do and act the same, processing synchronously 
my_task.run() 
my_task.delay() 

CELERY_ALWAYS_EAGER = False 
# These two won't be the same anymore. 
my_task.run() # Runs synchronously 
my_task.delay() # Passed to the queue and runs Asynchronously, in another process 
0

如果我理解你是對的,你想同步調用任務。

只要調用方法爲正常:

TaskName() 

你只需要使用delay當你想將它傳送給工人。

+0

確定,但你如何得到返回值?這仍然是由芹菜 – kentor

+1

包裹在其他東西。你仍然可以總是調用一個方法指定爲一個任務,你可以調用任何其他方法在Python中。 Celery只是將調用添加到外部進程可以執行的隊列中。如果你需要在芹菜內外調用這個任務(並且在外部,我的意思是同步執行一個腳本,而不是輪詢響應或類似的東西,或者使用任何異步工具),然後將其稱爲正常。沒有什麼奇特的需要。它仍然是一個可以返回值的方法,等等。 –