我使用redis task
celery
添加了一些错误的broker
但现在我想删除不正确的task
,我找不到任何方法来执行此操作
是否有一些命令或一些API来执行此操作?
答案 0 :(得分:23)
我知道两种方法:
1)直接从代理删除队列。在你的情况下,它是Redis。有两个命令可以帮助您: llen (找到正确的队列)和 del (删除它)。
2)使用 - 清除或 - 丢弃选项启动芹菜工作者。这是帮助:
--purge, --discard Purges all waiting tasks before the daemon is started.
**WARNING**: This is unrecoverable, and the tasks will
be deleted from the messaging server.
答案 1 :(得分:2)
我刚才有这个问题,以供将来的读者使用,
所以要正确清除等待任务的队列,你必须停止所有 工作人员,然后使用celery.control.purge()清除任务。
答案 2 :(得分:1)
1。 要正确清除等待任务的队列,您必须停止所有工作人员(http://celery.readthedocs.io/en/latest/faq.html#i-ve-purged-messages-but-there-are-still-messages-left-in-the-queue):
2 ...然后从特定队列中清除任务:
$ cd <source_dir
$ celery amqp queue.purge <queue name>
3。 再次启动工人
答案 3 :(得分:1)
最简单的方法是使用celery control revoke [id1 [id2 [... [idN]]]]
(也不要忘记传递-A project.application
标志)。其中id1到idN是任务ID。但是,出于有效的原因,不能保证每次运行都会成功。
请确保Celery具有API。这是一个如何通过脚本执行此操作的示例:res = app.control.revoke(task_id, terminate=True)
在上面的示例中,app
是Celery应用程序的一个实例。
在某些罕见的情况下,上面的控制命令将不起作用,在这种情况下,您必须指示Celery worker终止该worker进程:res = app.control.revoke(task_id, terminate=True, signal='SIGKILL')
答案 4 :(得分:0)
尝试删除.state文件,如果您使用的是节拍工作程序(celery worker -B),则也要删除计划文件