2017-11-21 17 views
0

シナリオ:セロリの労働者であっても、私は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サーバーからすべてのキューを削除しているので、新しいタスクのみを受け取るようになりました。しかし、私はまだ古い仕事をしています、さらに、新しい仕事はリストに現れていません。これの実際の原因は何でしょうか?

答えて

0

あなたが-Ofair旗を持っていない限り、何が起こっていることは、あなたの労働者が作業者に

https://medium.com/@taylorhughes/three-quick-tips-from-two-years-with-celery-c05ff9d7f9eb

を開始するときにも、あなたのキュー出し、あなたが明確な場合は、あなたの労働者がまだ意志、複数のタスクになりますされ作業者プロセス自体を終了させない限り、すでに実行されているタスクで実行してください。

編集して、再起動後に実行中のタスクを持っている場合は、タスクを取り消す必要がある

を追加します。

http://celery.readthedocs.io/en/latest/faq.html#can-i-cancel-the-execution-of-a-task

+0

でも入力して、コマンドからセロリの労働者を殺害した後: 'のPS auxww | grep 'celery worker' | awk '{print $ 2}' | xargs kill -9'を実行し、コンピュータを再起動した後も、私はそれらのタスクを受けています。そこから私はそれらのメッセージを受け取りますか? – RaiBnod

+0

を削除していないためです。 http://celery.readthedocs.io/en/latest/faq.html#can-i-cancel-the-execution-of-a-task – Jason

+0

上記のタスクは、メソッド呼び出しの取り消しなしで実行されました。さて、どうすればこれらのタスクリストをクリアすることができますか?残りのタスクのtask_idを確認できますか? – RaiBnod

関連する問題