app.control.revoke(
[uuid for uuid, _ in
celery.events.state.State().tasks_by_type(task.name)])
但是,此解决方案将忽略那些已计划在以后执行的任务。与一些对其他答案发表评论的人一样,当我检查返回内容时,我的列表为空。实际上我的队伍是空的。但我知道有一些任务计划在未来执行,这些任务是我的主要目标。我可以通过执行celery -A [app] inspect scheduled看到它们,但它们不受上面代码的影响。
通过执行以下操作,我成功地撤消了计划任务:
app.control.revoke(
[scheduled["request"]["id"] for scheduled in
chain.from_iterable(app.control.inspect().scheduled()
.itervalues())])
有一个问题,早期的答案没有解决,如果人们不知道的话,可能会被抛弃。
在已经发布的这些解决方案中,我将使用Danielle's进行一个小修改:将任务导入到我的文件中,并使用其
.name
属性获取要传递给.tasks_by_type()
的任务名称。但是,此解决方案将忽略那些已计划在以后执行的任务。与一些对其他答案发表评论的人一样,当我检查返回内容时,我的列表为空。实际上我的队伍是空的。但我知道有一些任务计划在未来执行,这些任务是我的主要目标。我可以通过执行
celery -A [app] inspect scheduled
看到它们,但它们不受上面代码的影响。通过执行以下操作,我成功地撤消了计划任务:
app.control.inspect().scheduled()
返回一个字典,该字典的键是工作机名称,值是调度信息的列表(因此,需要从itertools
导入的chain.from_iterable
)。任务信息位于计划信息的"request"
字段中,并且"id"
包含任务id。请注意,即使在吊销之后,计划任务仍将显示在计划任务中。在计划任务的计时器过期或芹菜执行某些清理操作之前,被吊销的计划任务不会从计划任务列表中删除。(重新启动工人会触发此类清理。)您可以在一个请求中完成此操作:
相关问题 更多 >
编程相关推荐