2012-07-26 61 views
30

在Celery中有一項任務可以在正常運行時運行10,000秒。然而,我的其餘任務應該在不到一秒的時間內完成。如何在不更改短時間運行任務的時間限制的情況下爲特意長時間運行的任務設置時間限制?使用芹菜在特定任務上設置時間限制

回答

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參數apply_async僅在開發版本的芹菜(主分支,未來版本3.1)中可用 – asksol 2012-07-27 14:32:24

+10

您還可以設置時間限制配置中的一個任務是使用:'CELERY_ANNOTATIONS = {'module.mytask':{'time_limit':20.0}}' – asksol 2012-07-27 14:33:11

+6

對於芹菜版本3.1.x,它看起來像'apply_async'的timeout/soft_timeout參數也是改爲'time_limit/soft_time_limit'。這裏介紹了相關更改 - https://github.com/celery/celery/commit/be6cef2e441e5ecf5857aeb77bd885f06128b9c9 – sanchitarora 2015-12-14 16:11:19

5

這是使用soft_time_limit與裝飾爲一個特定的任務和芹菜3.1.23示例 = 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'指定爲' – 2017-08-21 13:00:51