簡體   English   中英

從另一個芹菜任務調用芹菜任務

[英]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_notificationssend_async_fax實際操作它們之前關閉了文件。

為了測試這種預感,我嘗試在不使用delay函數的情況下調用send_notifications send_async_fax (即,send_async_fax(*args) 而不是 send_async_fax.delay(*args))。 那沒有改變任何東西。 然后,我注釋掉了send_async_faxtask裝飾器,使其成為常規函數。 在這種情況下,一切都按預期進行。

因此,要使其正常工作,顯而易見的解決方案是制作我的傳真功能的同步版本,並在從 celery 任務調用時使用它,而不是異步版本。 但是,我希望有比這更優雅的解決方案。 謝謝你的幫助。

  • 芹菜==3.0.19
  • django-芹菜==3.0.17

我敢打賭,這與嘗試將打開的文件序列化為延遲任務的參數有關。

嘗試將完整路徑文件名作為輸入參數發送到 send_async_fax 函數並打開 send_async_fax 中的文件。

我在這里舉了一個任務調用另一個任務的例子:

https://github.com/brentpayne/django-celery-example/blob/master/polls/tasks.py

https://github.com/brentpayne/django-celery-example/blob/master/polls/management/commands/one_task_calls_another.py

但你可能想要做一些更像:

group( send_async_fax.map(my_list_to_fax) ).delay()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM