python - 如何从 rabbitMQ 中永久删除 celery 任务?

标签 python rabbitmq celery amqp django-celery

我当前的 celery 设置中有大约 10,000 个计划任务。我没有意识到计划任务是什么,并决定使用它们提前几个月发送后续电子邮件。

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

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

但是,直到那时任务仍将保留在内存中,如果我随时重新启动我的 worker,撤销队列将被清除,因为我没有将其持久化。

如何从我的 celery worker 中永久删除任务?我基本上只需要向 rabbitMQ 发送一个确认消息,这样 rabbit 就会一劳永逸地删除它,如果我重新启动 celery,它就不会回来。

我查看了文档和源代码,并尝试自己在 shell 中执行此操作,但我无法找出向 rabbitMQ 确认任务然后永远弹出它的正确位置。

最佳答案

1. 要正确清除等待任务的队列,您必须停止所有工作程序 ( http://celery.readthedocs.io/en/latest/faq.html#i-ve-purged-messages-but-there-are-still-messages-left-in-the-queue ):

$ sudo rabbitmqctl stop

或者(如果 RabbitMQ/消息代理由 Supervisor 管理):

$ sudo supervisorctl stop all

2。 ...然后从特定队列中清除任务:

$ cd <source_dir>
$ celery amqp queue.purge <queue name>

3。 启动 RabbitMQ:

$ sudo rabbitmqctl start

或者(如果 RabbitMQ 由 Supervisor 管理):

$ sudo supervisorctl start all

关于python - 如何从 rabbitMQ 中永久删除 celery 任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24899772/

相关文章:

python - 如何仅替换数据框中前面带有数字的某个单词?

c# - 公共(public)交通和广播

python - Celery/Redis 任务过期

python - 使用教程无法使用 Django Celery Kombu

java - Spring amqp 拒绝监听器外部的消息

python - uwsgi:什么定义了 django 应用程序需要的 worker /进程的数量?

Python ctypes 组合两个 c_double 数组

python - 如何将本地 PyCharm 连接到服务器上安装的 python?这可能吗?

python - 如何在 Windows 上安装 tesserocr?

linux - 如何在 Ubuntu 上固定 Rabbitmq 版本?