Время ожидания rqworker
Я использую django-rq для обработки некоторых длительных задач на моем сайте django. Эти задачи отключают 180-секундный тайм-аут (я предполагаю) rqworker:
JobTimeoutException: Job exceeded maximum timeout value (180 seconds).
Как увеличить значение этого тайм-аута? Я попытался добавить --timeout 360 в команду rqworker, но это не распознано.
В моем коде на Python мое долгое задание вызывается через
django_rq.enqueue(
populate_trends,
self,
)
и попробовали
django_rq.enqueue_call(
func=populate_trends,
args=(self,),
timeout=3600,
)
который я заметил в rq docs, но django-rq не имеет такого метода.
Обновление
На данный момент я forked django-rq и добавил исправление placeer , чтобы увеличить таймаут. Вероятно, нужно работать с проектом, чтобы получить долгосрочное решение. Я начал обсуждать issue.
Ответы
Ответ 1
Кажется, это правильный подход к решению проблемы.
queue = django_rq.get_queue('default')
queue.enqueue(populate_trends, args=(self,), timeout=500)
Если вам нужно пройти kwargs,
queue = django_rq.get_queue('default')
queue.enqueue(populate_trends, args=(self,), kwargs={'x': 1,}, timeout=500)
Спасибо selwin за проект django-rq за помощь.
Ответ 2
Обновление:
Вы можете передать параметр таймаута в качестве аргумента ключевого слова в декоратор @job django-rq. Обратите внимание, что сначала необходимо передать аргумент имени очереди.
@job("default", timeout=600)
def long_running_task():
...
Ответ 3
Для ясности для людей, использующих функции с аргументами, вы можете передать таймаут ниже
string_to_print = "Hello World"
queue = django_rq.get_queue('default')
queue.enqueue(print_input, to_print=string_to_print, timeout=600)
для функции, принимающей такие аргументы, как ниже
@job
def print_input(to_print):
print "The input supplied is ", to_print