我已经在Celery上玩/工作了一段时间了,作为“请运行此任务,如果失败,请重试几次,如果失败10次以上,请给我发送电子邮件”工具太棒了正是这样。
问题是我被分配了一个问题,该问题要求我能够运行几组任务,暂停/恢复它们并停止它们。
我知道Celery有队列,可以调用add_consumer
和cancel_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不会显示每个队列的任务,也不会让我立即暂停特定的队列。充其量是,它可以让我取消使用方,正如我所说,该使用方将在完成预取的任务后停止执行任务。
答案 0 :(得分:0)
据我所知,Celery无法为您提供从框中暂停/恢复和停止任务的功能。
我认为最好先检查是否应该在任务代码之前运行任务。并将此信息存储在Redis中。
Controlling abilities of Celery
您可以查看: