更改Django中芹菜链组的设置

时间:2015-11-17 01:00:07

标签: python django celery multitasking

假设我在tasks.py中有以下功能:

def func():
    tasks = []
    myArray=range(1,100000)
    x_tasks = [add(i,i+1) for i in myArray]
    tasks.append(group(x_tasks))
    tasks.append(divide(400,20))
    task = chain(*tasks)
    task()

添加和划分是两个简单的功能。 如您所知,拥有组链会产生chord_unlock任务。我想知道如何更改其设置,如何更改default_retry_delay?对于其他函数,如加法和除法,我们可以在他们的装饰器中执行此操作,如:

@shared_task(default_retry_delay=240)
def add(x,y):
    return x+y

但我不知道如何更改使用组链隐式创建的chord_unlock任务的设置。

1 个答案:

答案 0 :(得分:0)

解决! 我需要使用从celery创建的app实例,如下所示:

import os

from celery import Celery

from django.conf import settings

# set the default Django settings module for the 'celery' program
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'annotate.settings')

app = Celery('hawkeye')

app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

app.tasks['celery.chord_unlock'].default_retry_delay = 300
app.tasks['celery.chord_unlock'].max_retries = None

事实上,app.tasks是一个包含所有任务的字典,通过它我们可以更改其设置。