Python 如何从rabbitMQ中永久删除芹菜任务?

Python 如何从rabbitMQ中永久删除芹菜任务?,python,rabbitmq,celery,amqp,django-celery,Python,Rabbitmq,Celery,Amqp,Django Celery,在我目前的芹菜设置中,我有大约10000个预定任务。我不知道计划的任务是什么,决定用它们提前几个月发送后续电子邮件 回顾过去,在将来安排一个任务超过1小时可能永远都不是一个好主意,因为每次重新启动一个worker时,它都必须重新接收来自rabbitMQ的每个计划任务,然后它们都被存储在内存中 我的问题是,如果我必须撤销一个任务,它不仅仅是删除它。任务保留在内存中,但撤销队列现在包含任务的ID。当它被执行时,芹菜会检查它是否被撤销,如果被撤销,它会在此时撤销它 但是,任务将一直保留在内存中,直到那

在我目前的芹菜设置中,我有大约10000个预定任务。我不知道计划的任务是什么,决定用它们提前几个月发送后续电子邮件

回顾过去,在将来安排一个任务超过1小时可能永远都不是一个好主意,因为每次重新启动一个worker时,它都必须重新接收来自rabbitMQ的每个计划任务,然后它们都被存储在内存中

我的问题是,如果我必须撤销一个任务,它不仅仅是删除它。任务保留在内存中,但撤销队列现在包含任务的ID。当它被执行时,芹菜会检查它是否被撤销,如果被撤销,它会在此时撤销它

但是,任务将一直保留在内存中,直到那时,如果我在任何时候重新启动我的工作程序,撤销队列将被清除,因为我没有使其持久化

如何永久删除芹菜工人的任务?我只需要向rabbitMQ发送一个已确认的回复,这样rabbit就可以一劳永逸地删除它,如果我重新启动芹菜,它就不会回来了。


我查阅了文档和源代码,并尝试在shell中自己完成,但我无法找到将任务打包到rabbitMQ然后永久弹出的正确位置。

如果您只使用了一个队列或一个任务,这很简单:

从:

答:您可以使用芹菜清除命令清除所有配置的任务队列:

$ celery -A proj purge
或按程序:

>>> from proj.celery import app
>>> app.control.purge()
1753
如果只想清除特定队列中的消息,则必须使用AMQP API或芹菜AMQP实用程序:

$ celery -A proj amqp queue.purge <queue name>
这样,所有任务都将按计划运行,但不会执行任何操作;因为它们既没有被重命名也没有被删除,所以不会有任何错误

显然,您应该更新代码以停止安排这些任务。一段时间后,将不再安排此类任务,因此您可以删除代码。

1。 要正确清除等待任务队列,您必须停止所有工作人员():

或者(如果RabbitMQ/MessageBroker由主管管理):

二,。 …然后从特定队列中清除任务:

$ cd <source_dir>
$ celery amqp queue.purge <queue name>
或者(如果RabbitMQ由主管管理):


这可以净化一切。我只想干掉一件事没错。如果您一直在使用其他任务,这将不起作用,而且我不知道任何从队列中删除任务的干净方法,但您可以始终忽略它们。将更新我的答案什么是项目?请记录proj将只是您的django项目,从芹菜4.1开始
proj\u app.control.purge()
返回0<代码>芹菜-项目应用程序清除不起任何作用。你找到方法了吗?
$ sudo rabbitmqctl stop
$ sudo supervisorctl stop all
$ cd <source_dir>
$ celery amqp queue.purge <queue name>
$ sudo rabbitmqctl start
$ sudo supervisorctl start all