如何在Celery中捕获事件
作者:互联网
我刚开始使用芹菜(更具体地说是django-celery),我仍然不熟悉它.
我正在开发一个应用程序,它将在工作人员中远程执行任务,每个任务大约需要3分钟才能完成. (不是繁重的处理,网络抓取的东西,但这是无关紧要的).
当我发送任务时,我得到一个可用于获取结果的引用.
>>> result = task_name.delay()
>>> result
<AsyncResult: c34d78d8-b512-4165-9384-2b87933e33b7>
但是,要知道任务何时完成,我必须继续进行投票
>>> result.ready()
False
为避免轮询,我的想法是听task-succeeded/task-failed事件.
所以,当我知道他们已经返回时,我可以继续处理,而无需检查数据库或不断询问它是否准备就绪.
(如果有人对任务完成检查有更好的建议,我很乐意听到)
不确定我是否有一些问题看到显而易见的,但是,我不知道我怎么能这样做.
在Celery Events docs,它说我应该使用自定义相机.
这是另一个问题,因为我打算使用django-celery的Django Admin Monitor.
所以,最后:
我可以在没有相机的情况下拍摄活动吗?怎么样?
如果没有,我可以用django-celery的相机吗?
解决方法:
任务中on_success和其他处理程序的问题是,它在worker上运行.如果使用此方法,则添加到该方法的代码必须触发所需的操作;但是这个任务没有关于什么进程调用它的信息,所以你可能会运行另一个任务……以某种方式路由到调用者…会在队列中等待执行…听起来不像你在寻找什么.
要获取任务级事件的异步通知,请使用http://docs.celeryproject.org/en/latest/userguide/monitoring.html?highlight=my_monitor#id20中演示的Celery.events.State.您可以选择要监视的事件,并在事件发生时获取实时通知(回调样式).
标签:python,celery,django-celery 来源: https://codeday.me/bug/20190630/1334608.html