Как перенести задачу, если она не выполняется более 10 минут? - PullRequest
1 голос
/ 18 октября 2011

У меня есть задача: recursive_task, которая запланирует выполнение той же задачи через 5 секунд, но если по какой-то причине эта задача завершится сбоем, ее необходимо будет выполнить повторно.Я перехватил почти каждый сценарий, но вы никогда не знаете, что произойдет в будущем.

Сначала я сделал повторную задачу: manage_tasks, которая проверяет состояние recursive_task и проверяет, не работал ли он долгое время, иесли он был успешно завершен, но это не правильно.Так как бы вы решили эту проблему?

Ответы [ 2 ]

1 голос
/ 18 октября 2011

Попробуйте установить acks_late CELERY_ACKS_LATE , сообщения о задачах будут подтверждены после ее выполнения. Благодаря этому вы сможете выполнить ваши задачи более легко.

0 голосов
/ 18 октября 2011

Я могу предложить взглянуть на сигналы питона:

http://docs.python.org/library/signal.html

import signal

# Set the signal handler and an alarm
signal.signal(signal.SIGALRM, handler)
signal.alarm(900) # 15 miutes
# some_function()

signal.alarm(0)          # Disable the alarm

Где:

def handler(signum, frame):
    # do something
    sys.exit(1)

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

...