2016-04-08 14 views
1

私はdjangoプログラムでセロリー3.1.17とredisをブローカーバージョン3.0.2として使用しています。 Ubuntu 14.04で動作しています。設定で長時間実行されているタスクの後ろにスタックすると、Celerybeatの定期的なタスクが複数回実行される

が、私は同じようCELERYBEAT_SCHEDULE定義:ここで

CELERYBEAT_SCHEDULE = { 
    'task1': { 
     'task': 'api.tasks.exsample.task1', 
     'schedule': crontab(hour=1, minute=0), 
     'args':() 
    }, 
    'task2': { 
     'task': 'api.tasks.exsample.task2', 
     'schedule': crontab(hour=1, minute=30), 
     'args':() 
    }, 
    'task3': { 
     'task': 'api.tasks.exsample.task3', 
     'schedule': crontab(hour=2, minute=0), 
     'args':() 
    }, 
    'task4': { 
     'task': 'api.tasks.exsample.task4', 
     'schedule': crontab(hour=2, minute=30), 
     'args':() 
    }, 
    'task5': { 
     'task': 'api.tasks.exsample.task5', 
     'schedule': crontab(hour=2, minute=40), 
     'args':() 
    }, 
    'task6': { 
     'task': ''api.tasks.exsample.task6', 
     'schedule': crontab(hour=2, minute=50), 
     'args':() 
    }, 
} 

問題です:

タスクは次のタスクのスケジュール時間前に終了した場合、それはすべての権利に動作します。しかし、タスクが長時間実行されると、task1は2時間実行され、その後のタスクはそれぞれ数回実行されます。セロリとセロビットを再起動すると、それでも時間外タスクが残っていることがありますが、時にはそうではありません。

私は多くを混乱させました。私はしばらくの間、セロリのドキュメントを読んでいましたが、理由を理解できませんでした。誰かがなぜこのようなことが起こったのか、タスクキューがブロックされたりセロリが再起動された場合のセロリのメッセージやタスクの管理方法について教えてください。

答えて

0

settings.pyではより多くの設定を追加

''' 
Task hard time limit in seconds. 
The worker processing the task will be killed and replaced with a new one when this is exceeded. 
''' 
CELERYD_TASK_TIME_LIMIT = 86400 
# CELERYD_TASK_TIME_LIMIT = 10 
''' 
Task soft time limit in seconds. 
The SoftTimeLimitExceeded exception will be raised when this is exceeded. The task can catch this to e.g. 
clean up before the hard time limit comes. 
''' 
CELERYD_TASK_SOFT_TIME_LIMIT = 80000 
関連する問題