2011-10-27 6 views
15

Pythonでセロリを使用して特定のqueのスケジュールされ実行されているタスクをすべて削除するにはどうすればいいですか?どのように特定のキューのすべてのタスクをセロリでPythonでパージするには?

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

:質問は、私は私がQUEを定義して次の行を、持っているとタスクを管理することQUEを削除したいコマンドラインコード

を捜しているわけではない追加するにはかなりstraigtforwardようだが、 1つの時点で、私はtwitter_saveのすべてのタスクをpythonコードで削除したいのですが、ブロードキャスト機能を使用していますか?私はこれに関する文書を見つけることができませんでした。これは可能ですか?

答えて

33

ちょうどセロリ3.1用@Sam Stoelingaの答えを更新するために、今では、端末上で次のように行うことができますジャンゴのために

celery amqp queue.purge <QUEUE_NAME> 

はmanage.pyファイルから起動するようにしてください:

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

ない場合は、セロリは--broker=フラグを設定することで、ブローカーに正しく指し示すことが可能であることを確認してください。

+0

ありがとうありがとうございました – Gourneau

+0

有効なAMQP URLを指すために '--broker = ...'引数を使用する必要がありました。何らかの理由でDjango settings.pyの設定値が取得されなかった。おそらく私のセットアップの特殊性。 – RichVel

+0

@RichVelは '。/ manage.py'から実行していますか?ブローカのurl引数は 'settings.py'ファイルから取得する必要があります。 – Hassek

6

笑それはかなり簡単です、誰かがまだ私を助けることができる願っています。

from celery.bin.camqadm import camqadm 
camqadm('queue.purge', queue_name_as_string) 

私はまだ私はキューのタスクを処理するために、再度celerydを実行する必要がパージした後、QUEをパージする前にcelerydを停止する必要があり、この唯一の問題。成功すればこの質問が更新されます。

私は成功しましたが、これは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") 
6

元の答えはCelery 3.1では機能しません。 Hassekのアップデートは、コマンドラインから行う場合は正しいコマンドです。

その後
celery_app = Celery(...) 

は、あなたのようにあなたのセロリのアプリを実行したと仮定すると:

import celery.bin.amqp 
amqp = celery.bin.amqp.amqp(app = celery_app) 
amqp.run('queue.purge', 'name_of_your_queue') 

これはあなたの「例のために便利ですあなたがしたい場合はしかし、それは、プログラム、これを行う一組のタスクが待ち行列に入れられ、あるタスクが致命的な状態に遭遇して、残りのタスクが実行されないようにします。

など。あなたは一連のWebクローラータスクを待ち行列に入れ、タスクの途中でサーバーのIPアドレスがブロックされます。残りのタスクを実行することには意味がありません。したがって、その場合は、自分のタスクが自分のキューをパージすることができます。

関連する問題