其他分享
首页 > 其他分享> > 如何在Celery中捕获事件

如何在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