2015-06-25 121 views
2

是否可以在不进行轮询的情况下监控芹菜任务的状态?监视芹菜任务状态没有轮询?

举例来说,如果我有一个任务,定期更新使用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}) 

是否可以监控来自另一个进程状态,没有投票?

回答

2

我还没有自己做过,所以这不是一个完整的答案,但我有兴趣解决同样的问题。我有三个想法值得考虑:

1

这取决于您的经纪人/后端。如果他们使用pub/sub,那么你的进程将不需要轮询任务状态。如果他们不这样做,那么你需要进行轮询(或者更普遍的是一个涉及发送消息询问状态的过程)。

我认为芹菜和redis都有这种能力。

+0

“进程不需要轮询任务状态” - 但它将如何访问任务状态? –

+0

它订阅('pub/sub')更新 – Maximilian

+1

但是,具体如何做到这一点? Celery会公开API吗? –

0

假设您想要跟踪生产者的进度,您需要使用事件监视API。其他apis,处理程序和信号,只在工作人员中运行;所以没有用于追踪制作人的进度。

请查看文档中名为“监视和管理指南”的部分,您应该能够几乎逐字地运行示例代码(对于事件接收者)。但是,它并没有提到,也需要为工作人员启用事件生成。你的工作的-E参数将解决这个问题。