1

デーモン化を使用して Celery 2 を実行しています - http://ask.github.com/celery/cookbook/daemonizing.htmlと RabbitMQ 。時々、サイレント クラッシュが発生します。celeryd.log に表示されるのは、

[2010-12-24 14:14:31,323: INFO/PoolWorker-1414] process shutting down
[2010-12-24 14:14:31,323: INFO/PoolWorker-1414] process exiting with exitcode 0
[2010-12-24 14:14:31,331: INFO/PoolWorker-1415] child process calling self.run()
[2010-12-24 14:14:48,673: INFO/MainProcess] Got task from broker: airsale.search.xxx.get_search_results[01bf5d36-7c0e-4f8a-af69-750ef1b24abc]
[2010-12-24 14:14:48,761: INFO/MainProcess] Got task from broker: airsale.search.xxx.get_search_results[2d5f9952-d493-4de4-9752-0eee1776147d]
[2010-12-24 14:14:48,861: INFO/MainProcess] Got task from broker: airsale.search.xxx.get_search_results[0c77c1ec-df6c-4e34-875c-44909fbf8b9f]
[2010-12-24 14:14:48,961: INFO/MainProcess] Got task from broker: airsale.search.xxx.get_search_results[3d83dd54-0be8-4cf9-9cd6-81e070d97170]
[2010-12-24 14:14:49,061: INFO/MainProcess] Got task from broker: airsale.search.xxx.get_search_results[2dd29e70-e085-4fd1-a7ef-12d06b21644c]
..........

次に、タスク処理なしで「ブローカーからタスクを取得」のみ。

ps -C celeryd表示 - セロリ ノードが実行されていることを示します。

私が行う場合: /etc/init.d/celeryd restart- celeryd プロセスの数が 2 倍になります。古いプロセスはもはやデーモンによって制御されていないようです。

  1. 検出方法 - ブローカーからタスクを受信して​​もタスク処理が実行されないのはなぜですか?
  2. 古い celeryd プロセスが によって強制終了されないのはなぜ/etc/init.d/celeryd restartですか?
4

1 に答える 1

1

キュー ワーカーが停止するため、これに対する主な解決策は、タスクがこの時間を超えたときにワーカーを再起動する方法で、各タスクのタスク時間制限を調整することです。

タスクに次を追加します

from celery.decorators import task
from celery.exceptions import SoftTimeLimitExceeded


@task()
def mytask():
    try:
        do something()
    except SoftTimeLimitExceeded:
        clean something()

あなたのsettings.pyに以下を追加してください

CELERYD_TASK_TIME_LIMIT = 30 #sec
CELERYD_TASK_SOFT_TIME_LIMIT = 30 #sec
于 2011-02-22T11:55:20.313 に答える