我有一个名为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
装饰器,使其成为常规功能。在这种情况下,一切都按预期工作。
因此,为了实现这一点,显而易见的解决方案是在从芹菜任务调用时,制作我的传真功能的同步版本并使用它而不是异步版本。但是,我希望有一种比这更优雅的解决方案。谢谢你的帮助。
答案 0 :(得分:0)
我敢打赌它与尝试将打开的文件序列化为延迟任务的参数有关。
尝试将fullpath文件名作为输入参数发送到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()