是否可以在不轮询的情况下监视 celery 任务的状态?
例如,如果我有一个使用update_state以下命令定期更新其状态的任务:
@task(bind=True)
def my_task(self):
for x in range(100):
time.sleep(1)
self.update_state(state='PROGRESS', meta={'x': x})
Run Code Online (Sandbox Code Playgroud)
是否可以在不轮询的情况下从另一个进程监视该状态?
我自己还没有这样做过,所以这不是一个完整的答案,但我有兴趣解决同样的问题。我有三个值得考虑的想法:
使用、、和 等内置处理程序状态是否适合您的用例?on_failureon_retryon_success
另一种方法是子类化Task(这里是一个简单的示例:celery apply_async 的回调)并添加on_*为自定义状态传递回调函数的处理程序。也许这甚至没有必要
最好的方法可能是编写一个自定义事件接收器。我认为这就是他们的“实时芹菜网络监视器”示例的工作原理。与此相关的 SO 帖子是:Implementing Twisted style local multiple deferred callbacks in Celery。
| 归档时间: |
|
| 查看次数: |
1109 次 |
| 最近记录: |