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 forsend\u async\u fax
,使其成为常规函数。在这种情况下,一切都按预期进行
因此,要使其正常工作,一个显而易见的解决方案是创建一个同步版本的传真函数,并在从芹菜任务调用时使用它,而不是异步版本。然而,我希望有一个比这更优雅的解决方案。谢谢你的帮助
- 芹菜==3.0.19
- django芹菜==3.0.17
group( send_async_fax.map(my_list_to_fax) ).delay()