Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用python中的芹菜清除特定队列中的所有任务?_Python_Django_Celery - Fatal编程技术网

如何用python中的芹菜清除特定队列中的所有任务?

如何用python中的芹菜清除特定队列中的所有任务?,python,django,celery,Python,Django,Celery,如何用python中的芹菜清除特定que的所有计划和正在运行的任务?这些问题似乎很难回答,但补充一句,我并不是在寻找命令行代码 我有以下行,它定义了que,并希望清除该que以管理任务: CELERY_ROUTES = {"socialreport.tasks.twitter_save": {"queue": "twitter_save"}} 在一个时间点上,我想用python代码清除que twitter_save中的所有任务,可能是使用广播函数?我找不到关于这个的文档。这可能吗?哈哈,这很

如何用python中的芹菜清除特定que的所有计划和正在运行的任务?这些问题似乎很难回答,但补充一句,我并不是在寻找命令行代码

我有以下行,它定义了que,并希望清除该que以管理任务:

CELERY_ROUTES = {"socialreport.tasks.twitter_save": {"queue": "twitter_save"}}

在一个时间点上,我想用python代码清除que twitter_save中的所有任务,可能是使用广播函数?我找不到关于这个的文档。这可能吗?

哈哈,这很容易,但还是希望有人能帮我

from celery.bin.camqadm import camqadm
camqadm('queue.purge', queue_name_as_string)
唯一的问题是,我仍然需要在清除que之前停止celeryd,在清除que之后,我需要再次运行celeryd来处理队列的任务。如果我成功,将更新此问题

我成功了,但请纠正我,如果这不是一个很好的方法来停止芹菜,清除并重新启动它。我知道我在使用这个术语,因为我实际上希望它在任务中被终止

kill_command =  "ps auxww | grep 'celeryd -n twitter_save' | awk '{print $2}' | xargs kill -9"
subprocess.call(kill_command, shell=True)

camqadm('queue.purge', 'twitter_save')
rerun_command = "/home/samos/Software/virt_env/twittersyncv1/bin/python %s/manage.py celeryd -n twitter_save -l info -Q twitter_save" % settings.PROJECT_ROOT

os.popen(rerun_command+' &')
send_task("socialreport.tasks.twitter_save")

只是为了更新芹菜3.1的@Sam Stoelinga答案,现在可以在终端上这样做:

celery amqp queue.purge <QUEUE_NAME>
芹菜amqp queue.purge
对于Django,请确保从manage.py文件启动它:

./manage.py celery amqp queue.purge <QUEUE_NAME> 
/manage.py芹菜amqp queue.purge

如果没有,请通过设置
--broker=
标志确保芹菜能够正确指向代理。

原始答案不适用于芹菜3.1。如果您希望从命令行执行更新,则Hassek的更新是正确的命令。但如果您想以编程方式执行此操作,请执行以下操作:

假设您以以下方式运行芹菜应用程序:

celery_app = Celery(...)
然后:

当您将一组任务排入队列,并且一个任务遇到致命情况时,您知道这将阻止其余任务执行,这种情况非常方便


<>例如,你排队了一组网络爬虫任务,在你任务的中间,你的服务器的IP地址被阻塞了。执行其余的任务没有意义。因此,在这种情况下,您的任务本身可以清除它自己的队列。

我需要使用
--broker=…
参数来指向有效的AMQP URL,因为出于某种原因,Django settings.py中的配置值没有被拾取。也许是我的设置的一个特点。@RichVel您是从
/manage.py
运行它的吗?代理url参数应该取自
settings.py
文件。@Hassek-好的观点。对于Django用户,请尝试
/manage.py芹菜amqp…
,这很有效。由于这些
amqp
命令主要是改变事情的,
/manage.py芹菜amqp help
值得尝试,因为它测试与代理的连接。也许可以将此添加到Django用户的答案中?
import celery.bin.amqp
amqp = celery.bin.amqp.amqp(app = celery_app)
amqp.run('queue.purge', 'name_of_your_queue')