シナリオ:セロリの労働者であっても、私はRabbitMQのキューには何のメッセージを持っていない
@app.task(bind=True, max_retries = 5, base=MyTask)
def testing(self):
try:
raise smtplib.SMTPException
except smtplib.SMTPException as exc:
print 'This is it'
self.retry(exc=exc, countdown=2)
#Overriding base class of Task
class MyTask(celery.Task):
def on_failure(self, exc, task_id, args, kwargs, einfo):
print "MyTask on failure world"
pass
:
私は[キューイングメッセージのブローカーとしてのRabbitMQ]テストの目的のためにセロリのshared_taskを作成していました私は、作業を作成した後にコマンドtesting.delay()を10回入力して、テストのタスクを呼び出しました。そして、Ctrl + Cキーを押してサーバーを終了し、RabbitMQサーバーからこれらのキューをすべて削除します。もう一度私はサーバーを起動しました。
サーバ起動コマンド:キューのcelery worker --app=my_app.settings -l DEBUG
削除]コマンド:rabbitmqadmin delete queue name=<queue_name>
削除労働者がコマンド:ps auxww | grep 'celery worker' | awk '{print $2}' | xargs kill -9
問題:
私はすでにRabbitMQサーバーからすべてのキューを削除しているので、新しいタスクのみを受け取るようになりました。しかし、私はまだ古い仕事をしています、さらに、新しい仕事はリストに現れていません。これの実際の原因は何でしょうか?
でも入力して、コマンドからセロリの労働者を殺害した後: 'のPS auxww | grep 'celery worker' | awk '{print $ 2}' | xargs kill -9'を実行し、コンピュータを再起動した後も、私はそれらのタスクを受けています。そこから私はそれらのメッセージを受け取りますか? – RaiBnod
を削除していないためです。 http://celery.readthedocs.io/en/latest/faq.html#can-i-cancel-the-execution-of-a-task – Jason
上記のタスクは、メソッド呼び出しの取り消しなしで実行されました。さて、どうすればこれらのタスクリストをクリアすることができますか?残りのタスクのtask_idを確認できますか? – RaiBnod