Подтвердить что ты не робот

Время ожидания 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.

4b9b3361

Ответ 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