web-dev-qa-db-ja.com

セロリを使用した特定のタスクの制限時間の設定

Celeryには、通常の動作中に10,000秒間実行される可能性のあるタスクがあります。ただし、残りのタスクはすべて1秒未満で完了する必要があります。短時間実行タスクの制限時間を変更せずに、意図的に長時間実行タスクの制限時間を設定するにはどうすればよいですか?

44
jimstandard

タスクの定義中または呼び出し中に、タスクの時間制限( 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)
60
mher

これは、soft_time_limit= 10000を使用して特定のタスクおよびCelery 3.1.23のデコレータを使用した例です

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