[英]Calling a celery task from another celery task
我有一個名為send_async_fax
的芹菜任務和另一個名為send_notifications
任務。 send_async_fax
可以直接調用。 但是,如果您調用send_notifications
,也會調用send_async_fax
。
send_async_fax
有許多參數,其中之一是file
對象列表。 如果我直接調用send_async_fax
,一切似乎都按計划進行。 但是,當它通過send_notifications
被間接調用時,我發現有效打開文件列表降級為未初始化文件列表。
我的直覺是, send_notifications
實際上是在調用send_async_fax.delay
時為發送傳真創建單獨的異步任務(當然,這是有道理的)。 但是,通過這樣做,我懷疑文件引用被弄亂了,或者send_notifications
在send_async_fax
實際操作它們之前關閉了文件。
為了測試這種預感,我嘗試在不使用delay
函數的情況下調用send_notifications
send_async_fax
(即,send_async_fax(*args) 而不是 send_async_fax.delay(*args))。 那沒有改變任何東西。 然后,我注釋掉了send_async_fax
的task
裝飾器,使其成為常規函數。 在這種情況下,一切都按預期進行。
因此,要使其正常工作,顯而易見的解決方案是制作我的傳真功能的同步版本,並在從 celery 任務調用時使用它,而不是異步版本。 但是,我希望有比這更優雅的解決方案。 謝謝你的幫助。
我敢打賭,這與嘗試將打開的文件序列化為延遲任務的參數有關。
嘗試將完整路徑文件名作為輸入參數發送到 send_async_fax 函數並打開 send_async_fax 中的文件。
我在這里舉了一個任務調用另一個任務的例子:
https://github.com/brentpayne/django-celery-example/blob/master/polls/tasks.py
但你可能想要做一些更像:
group( send_async_fax.map(my_list_to_fax) ).delay()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.