【问题标题】:How to capture an event in Celery如何在 Celery 中捕获事件
【发布时间】:2012-03-16 17:03:07
【问题描述】:

我刚开始使用 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 的相机一起使用吗?

【问题讨论】:

  • 您的问题是否已解决或仍未得到解答?做更新。

标签: python celery django-celery


【解决方案1】:

on_successTask 中的其他处理程序的问题在于,它在工作程序上运行。如果您使用这种方法,则添加到该方法的代码必须触发所需的操作;但是该任务没有有关调用它的进程的信息,因此您可能会运行另一个任务...以某种方式路由到调用者...它将在队列中等待执行...听起来不像你在找什么。

要获取任务级事件的异步通知,请使用Celery.events.State,如http://docs.celeryproject.org/en/latest/userguide/monitoring.html?highlight=my_monitor#id20 中所示。您可以选择监控哪些事件,并在事件发生时获得实时通知(回调样式)。

【讨论】:

    【解决方案2】:

    现在 celery 文档目前无法解决我的问题,但您似乎应该能够设置一个回调方法,您的远程任务可以调用该方法来通知您任务已完成。如果/当我可以得到芹菜文档来解决时,我会更新这个答案。

    编辑:现在进入文档。

    所以根据the documentation,您似乎想要的是一个带有on_successafter_return 处理程序的任务类。根据您的用例,此方法可以使用任务的返回值执行您需要执行的处理,也可以通知您结果已成功。我会推荐前者,除非您特别需要在处理程序而不是工作人员上运行。无论如何,无论哪种方式,您都不需要再轮询result.ready()

    【讨论】:

    • 其实我确实需要对handler做处理。我试过after_return(),但是这个会在worker端执行。我现在试试on_success()
    • 我相信 after_return 在处理程序上被调用,所以这应该给你你需要的能力。如果您需要在启动任务的同一上下文(块)中,您可能会 a)需要进行轮询,或 b)实际上可能需要将其作为同步子任务执行,并创建块作为设计为在处理程序上运行的新任务。
    • 阅读摄像头,它们真正设计用于监控整个任务的环境(队列大小、所有任务的状态等),而不是监控单个任务本身。
    • 好吧,on_success 的行为就像 after_return。我只写了一个打印语句,它们的输出是在工人端。我的意思是,我在这里做错了吗?
    • 在发送任务之前,我打开一个本地存储的配置文件(每个任务都有自己的)提取一些数据。发送带有提取数据的任务。任务执行并返回附加数据。必须按照配置文件中的指示再次处理此数据。经过后期处理后,将数据保存到文件中,并将对它的引用存储在数据库中。非常粗略,就是这个想法。
    猜你喜欢
    • 2013-05-10
    • 2012-05-21
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多