我如何删除所有挂起的任务,而不知道每个任务的task_id ?
当前回答
对于芹菜3.0+:
$ celery purge
清除特定队列:
$ celery -Q queue_name purge
其他回答
从文档中可以看出:
$ celery -A proj purge
or
from proj.celery import app
app.control.purge()
(编辑:更新与当前的方法。)
芹菜2。X和3.x:
例如,当使用带-Q参数的worker来定义队列时
celery worker -Q queue1,queue2,queue3
然后芹菜清除将不会工作,因为您不能传递队列参数给它。它只会删除默认队列。 解决方案是用——purge参数启动你的worker,就像这样:
celery worker -Q queue1,queue2,queue3 --purge
然而,这将运行worker。
另一个选择是使用芹菜的amqp子命令
celery amqp queue.delete queue1
celery amqp queue.delete queue2
celery amqp queue.delete queue3
对于芹菜5.0+,从CLI执行该操作,并针对特定的队列:
—APP_NAME清除——QUEUE_NAME
如果你想像我一样在一个步骤中做,那么在最后添加-f选项来跳过确认步骤。
对于芹菜3.0+:
$ celery purge
清除特定队列:
$ celery -Q queue_name purge
对于芹菜5.0+版本,使用RabbitMQ作为代理
我们需要先建立一个从程序到经纪人的新连接, 并将连接与要清除的队列绑定。
# proj/celery.py
from celery import Celery
app = Celery('proj')
from proj.celery import app
queues = ['queue_A', 'queue_B', 'queue_C']
with app.connection_for_write() as conn:
conn.connect()
for queue in queues:
count = app.amqp.queues[queue].bind(conn).purge()
print(f'Purge {queue} with {count} message(s)')