2012-07-26 18 views
30

セロリで正常に動作している間に10,000秒間実行される可能性のあるタスクがあります。しかし、残りの作業はすべて1秒未満で完了しなければなりません。短時間実行するタスクの時間制限を変更せずに、意図的に長時間実行しているタスクの時間制限を設定するにはどうすればよいですか?セロリで特定のタスクに時間制限を設定する

答えて

44

タスクの定義中または呼び出し中に、タスクの時間制限(hardおよび/またはsoft)を設定できます。

from celery.exceptions import SoftTimeLimitExceeded 

@celery.task(time_limit=20) 
def mytask(): 
    try: 
     return do_work() 
    except SoftTimeLimitExceeded: 
     cleanup_in_a_hurry() 

又は

mytask.apply_async(args=[], kwargs={}, time_limit=30, soft_time_limit=10) 
+0

音符タイムアウト/ soft_timeout引数にそれを使用して、特定のタスクのためのデコレータとセロリ3.1.23有する例でありますapply_asyncは、セールスの開発版(masterブランチ、将来のバージョン3.1)でのみ利用可能です。 – asksol

+10

また、 'CELERY_ANNOTATIONS = {'module.mytask':{'time_limit':20.0}}' – asksol

+6

セロリのバージョン3.1.xの場合、 'apply_async'の' timeout/soft_timeout'引数も同じように見えます'time_limit/soft_time_limit'に変更されました。関連する変更がここに導入されました - https://github.com/celery/celery/commit/be6cef2e441e5ecf5857aeb77bd885f06128b9c9 – sanchitarora

5

これはsoft_time_limit = 10000

@task(bind=True, default_retry_delay=30, max_retries=3, soft_time_limit=10000) 
def process_task(self, task_instance): 
    """Task processing.""" 
     pass 
+0

'@task(soft_time_limit = 10、time_limit = 15)'のように 'time_limit'を割り当てることもできます。 –

関連する問題