Django 从另一芹菜任务调用芹菜任务

Django 从另一芹菜任务调用芹菜任务,django,celery,Django,Celery,我有一个芹菜任务叫做send\u async\u fax,另一个任务叫做send\u notifications发送异步传真。但是,如果调用send\u notification,也将调用send\u async\u fax send\u async\u fax有许多参数,其中一个参数是文件对象的列表。如果我直接呼叫send\u async\u fax,一切似乎都按计划进行。但是,当通过send_notifications间接调用它时,我发现有效打开文件的列表降级为未初始化文件的列表 我的直觉是

我有一个芹菜任务叫做
send\u async\u fax
,另一个任务叫做
send\u notifications
<可以直接调用代码>发送异步传真。但是,如果调用
send\u notification
,也将调用
send\u async\u fax

send\u async\u fax
有许多参数,其中一个参数是
文件
对象的列表。如果我直接呼叫
send\u async\u fax
,一切似乎都按计划进行。但是,当通过
send_notifications
间接调用它时,我发现有效打开文件的列表降级为未初始化文件的列表

我的直觉是,
send\u notification
实际上是在调用
send\u async\u fax.delay
时为发送传真创建单独的异步任务(当然,这是有意义的)。然而,通过这样做,我怀疑文件引用被弄乱了,或者
send\u notifications
send\u async\u fax
实际操作文件之前关闭了文件

为了测试这种预感,我尝试在
send\u notifications
中调用
send\u async\u fax
,而不使用
delay
函数(即,send\u async\u fax(*args),而不是send\u async\u fax.delay(*args))。这没有改变任何事情。然后,我注释掉了
任务
decorator for
send\u async\u fax
,使其成为常规函数。在这种情况下,一切都按预期进行

因此,要使其正常工作,一个显而易见的解决方案是创建一个同步版本的传真函数,并在从芹菜任务调用时使用它,而不是异步版本。然而,我希望有一个比这更优雅的解决方案。谢谢你的帮助

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

我打赌这与试图将打开的文件序列化为延迟任务的参数有关

尝试将完整路径文件名作为输入参数发送到send_async_fax函数,并在send_async_fax中打开文件

我在这里举了一个任务调用另一个任务的例子:

但您可能想做一些更像:

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