我有一个叫做 celery 的任务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
为了测试这种预感,我尝试send_async_fax
在send_notifications
不使用delay
函数的情况下调用(即 send_async_fax(*args) 而不是 send_async_fax.delay(*args))。那并没有改变什么。task
然后,我将装饰器注释掉send_async_fax
以使其成为常规功能。在这种情况下,一切都按预期工作。
因此,要使其正常工作,显而易见的解决方案是制作我的传真功能的同步版本,并在从 celery 任务调用时使用它,而不是异步版本。但是,我希望有比这更优雅的解决方案。谢谢你的帮助。
- 芹菜==3.0.19
- django-celery==3.0.17