2012-07-02 3 views
2

здания по этому вопросу:Hard таймаут с помощью сельдерея с Джанго

Django Celery Time Limit Exceeded?

У меня есть некоторые задачи, которые могут выполняться на некоторое время. Однако большинство задач не должно занимать больше нескольких секунд. Я не хочу, чтобы глобальный тайм-аут учитывал те длительные задачи. Скорее, я хотел бы иметь глобальный жесткий таймлит, который является коротким, и вручную настроить задачи, которые мне нужны, чтобы иметь более длительный тайм-аут.

При оформлении задачи с помощью @task я сделал @task (timeout = None), и все же эта задача по-прежнему достигла таймаута в 300 секунд. Я вызвал задачу с task_function.delay (args).

Есть ли способ вызвать задачу и настроить ее таймаут?

ответ

3

This issue адреса случай, когда вы можете вызвать задачу с пользовательскими таймаутами. Он реализован в issue802 branch, но пока еще не освоен. Вы можете объединить его с мастером и использовать желаемые функции.

С помощью этого патча вы можете передавать таймауты при вызове задач.

tasks.add.apply_async (Args = [1,2], soft_timeout = 2, тайм-аут = 5)

2

Какая версия сельдерея работает? Список current stable docstime_limit в качестве правильного аргумента для установки таймаута для задачи и использования рабочего значения по умолчанию, если не установлен лимит времени. Для того, чтобы установить длинный (например, 60 минут) тайм-аут на задаче, которую вы можете использовать:

@task(time_limit=3600) 
def mytask(): 
    ... 

В качестве альтернативы, вы можете использовать apply_async изменить лимит времени при вызове задачи:

mytask.apply_async(time_limit=3600, args=args) 
+0

Я попробовал оба выше, и в обоих случаях глобальные настройки переопределения. Я использую 2.5.5 –

Смежные вопросы