在Celery中控制和查询任务

时间:2019-01-12 12:45:25

标签: python task celery flower

我已经在Celery上玩/工作了一段时间了,作为“请运行此任务,如果失败,请重试几次,如果失败10次以上,请给我发送电子邮件”工具太棒了正是这样。

问题是我被分配了一个问题,该问题要求我能够运行几组任务,暂停/恢复它们并停止它们。

我知道Celery有队列,可以调用add_consumercancel_consumer,但是我注意到,即使我取消了使用者,该工作人员仍将执行我们正在执行的所有任务已经预取。这意味着无法发出Pause *NOW*命令。只有Pause sometime later, when you're done doing stuff

一种解决方法是设计任务本身,以检查它们是否应该真正运行或休眠。

但是随后另一个问题显示:¿实际上我有多少个任务? Celery将公开查询活动和计划任务的原始方法,但是我注意到处于RETRY状态的任务既不在活动列表中也不在计划列表中,这意味着查询任务总数Celery容易出错。

一种解决方法是使用Redis(或任何其他类型的数据库)并存储每个任务的状态。然后直接查询数据库,而不是查询Celery。

我要说的是,就我的经验而言,芹菜实际上不允许任何细粒度的控制。它只是盲目地运行任务。

难道没有什么能让我更好地控制芹菜的吗?会让我暂停/恢复/停止整个任务队列的东西,也许会告诉我一些统计信息(how many tasks in total in this queue?how many active in this queue?how many in retry state in this queue?等)

仅供参考:是的,我知道花是什么。不,Flower不提供我要的任何东西。 Flower不会显示每个队列的任务,也不会让我立即暂停特定的队列。充其量是,它可以让我取消使用方,正如我所说,该使用方将在完成预取的任务后停止执行任务。

1 个答案:

答案 0 :(得分:0)

据我所知,Celery无法为您提供从框中暂停/恢复和停止任务的功能。

我认为最好先检查是否应该在任务代码之前运行任务。并将此信息存储在Redis中。

Controlling abilities of Celery

您可以查看: