Долгосрочные работы восстанавливаются после истечения времени ожидания видимости брокера с сельдереем и redis - PullRequest
0 голосов
/ 21 января 2020

Я использую сельдерей 4,3 + Redis + цветок. У меня есть несколько длительных заданий с acks_late = True и task_reject_on_worker_lost = True. Я использую группирование сельдерея для параллельного выполнения заданий и добавления результата и использования в родительском задании.

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

Примеры заданий, как показано ниже.

@app.task(queue='q1', bind=True, acks_late=True, task_reject_on_worker_lost=True, max_retries=3)
def job_1(self):
  do_something()
  task_group = group(job_2.s(batch) for batch in range(0, len([1,2,3,4,5,6]), 3))
  result_group = task_group.apply_async()

@app.task(queue='q1', bind=True, acks_late=True, task_reject_on_worker_lost=True, max_retries=3)
def job_2(self, batch):
  do_something()
  return result

Вышеуказанное задание job_2 будет выполняться более часа, а через час оно снова возвращается работнику.

Моя настройка и конфигурация сельдерея, как показано ниже:

c = Celery(app.import_name,
           backend=app.config['CELERY_RESULT_BACKEND'],
           broker=app.config['CELERY_BROKER_URL'])

config.py

CELERY_BROKER_URL = os.environ['CELERY_BROKER_URL']
CELERY_RESULT_BACKEND = os.environ['CELERY_RESULT_BACKEND']
CELERY_BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 36000}

Я попытался увеличить время ожидания видимости до 10 часов после повторной доставки, как описано выше в конфигурации. но похоже, что он не работает.

Пожалуйста, помогите с этой проблемой и дайте мне знать, если какое-либо решение.

...