2015-12-28 7 views
9

私はDjango 1.6RabbitMQ 3.5.6celery 3.1.19を使用しています。RabbitMQからのエタを伴うセロリのタスク

30秒ごとに実行され、与えられたetaパラメータで200のタスクを作成する定期的なタスクがあります。私がセロリの作業員を実行した後、RabbitMQでゆっくりキューが作成され、約1200個のタスクが解雇されるのを待っています。次に、セロリのワーカーを再起動し、待機中の1200個のスケジュールされたタスクはすべてRabbitMQから削除されます。私は実行 my_task.apply_async((arg1, arg2), eta=my_object.time_in_future)

このような労働者:私は、タスクを作成する方法

python manage.py celery worker -Q my_tasks_1 -A my_app -l

CELERY_ACKS_LATEは、Djangoの設定でTrueに設定されています。私は何らかの理由を見つけることができませんでした。

別の設定/フラグ/パラメータでワーカーを実行する必要がありますか?何か案が?

+0

1)ウサギサーバー全体ではなくワーカーのみを再起動してもよろしいですか? 2)タスクに 'ttl'時間を設定して、この時間が過ぎると単純に削除されるのでしょうか? – matino

+0

1)私は、労働者だけが再開されると確信しています。 2)どのような構成でもタスクに設定されるttlはありません。これはデフォルトの設定です。しかし、従業員を開いたままにしておくと、タスクはキューに残ります。 –

+0

デバッグログを共有できますか? –

答えて

1

私が知っている限り、CeleryはRabbitMQのスケジュールされたキューに依存しません。内部的にETA/Countdownを実装しています。
十分なメッセージを取り出して内部的にスケジュールすることができる十分な労働者がいるようです。
200人の労働者を必要としないことを心に留めてください。プリフェッチ・マルチプライヤーはデフォルト値に設定されているため、必要なものは少なくなります。

関連する問題