【问题标题】:How do I permanently remove a celery task from rabbitMQ?如何从 rabbitMQ 中永久删除 celery 任务?
【发布时间】:2014-07-23 00:02:18
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 你找到方法了吗?

标签: python rabbitmq celery amqp django-celery


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如果您只使用一个队列或一个任务,这很容易:

    来自docs

    回答:可以使用 celery purge 命令清除所有已配置的任务队列:

    $ celery -A proj purge
    

    或以编程方式:

    >>> from proj.celery import app
    >>> app.control.purge()
    1753
    

    如果您只想清除特定队列中的消息,则必须使用 AMQP API 或 celery amqp 实用程序:

    $ celery -A proj amqp queue.purge <queue name>
    

    数字 1753 是删除的消息数。

    您也可以使用--purge 参数启动worker,以便在worker 启动时清除消息。

    更新: 如果您有多个队列或任务

    我不知道有什么方法可以在 RabbitMQ 中编辑它们,因为服务器不是为访问/编辑/删除排队任务而构建的,但您始终可以在代码中禁用您的任务:

    @task
    def my_old_task()
       pass
    

    这样所有任务都会按计划运行,但不会执行任何操作;因为它们既没有被重命名也没有被删除,所以你不会有任何错误。

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

    【讨论】:

    • 这会清除所有内容。我只想摆脱一个任务
    • 是的,完全正确。如果您一直在使用其他任务,这将不起作用,而且我不知道从队列中删除任务的任何干净方法,但您始终可以忽略它们。将更新我的答案
    • 什么是项目?请记录
    • proj 只是你的 django 项目
    • 从 Celery 4.1 开始,proj_app.control.purge() 返回 0。celery -A proj_app purge 什么都不做。
    猜你喜欢
    • 1970-01-01
    • 2013-11-20
    • 2011-11-01
    • 2017-10-21
    • 2015-09-20
    • 2017-09-10
    • 2013-06-15
    • 2020-12-16
    • 2017-01-06
    相关资源
    最近更新 更多