Сельдерей рабочий — ConnectionResetError: [WinError 10054] Существующее соединение было принудительно закрыто удаленным хостом

#python #celery

#питон #сельдерей #python

Вопрос:

Соединение с сельдереем прерывается при выполнении длительной задачи. Я использую amqp в качестве брокера и redis в качестве серверной части.

Сельдерей запущен на удаленном хосте, команда, которую я использую для celery worker, выглядит следующим образом

 pipenv run celery worker -A src.celery_app -l info -P gevent --without-mingle --without-heartbeat --without-gossip -Q queue1 -n worker1
  

Журнал ошибок выглядит следующим образом:-

 [2020-09-09 14:26:46,820: CRITICAL/MainProcess] Couldn't ack 1, reason:ConnectionResetError(10054, 'An existing connection was forcibly closed by the remote host', None, 10054, None)
Traceback (most recent call last):
  File "c:usersg-us01.test.virtualenvscelery-z5n-38vtlibsite-packageskombumessage.py", line 131, in ack_log_error
    self.ack(multiple=multiple)
  File "c:usersg-us01.test.virtualenvscelery-z5n-38vtlibsite-packageskombumessage.py", line 126, in ack
    self.channel.basic_ack(self.delivery_tag, multiple=multiple)
  File "c:usersg-us01.test.virtualenvscelery-z5n-38vtlibsite-packagesamqpchannel.py", line 1394, in basic_ack
    spec.Basic.Ack, argsig, (delivery_tag, multiple),
  File "c:usersg-us01.test.virtualenvscelery-z5n-38vtlibsite-packagesamqpabstract_channel.py", line 59, in send_method
    conn.frame_writer(1, self.channel_id, sig, args, content)
  File "c:usersg-us01.test.virtualenvscelery-z5n-38vtlibsite-packagesamqpmethod_framing.py", line 189, in write_frame
    write(view[:offset])
  File "c:usersg-us01.test.virtualenvscelery-z5n-38vtlibsite-packagesamqptransport.py", line 305, in write
    self._write(s)
  File "c:usersg-us01.test.virtualenvscelery-z5n-38vtlibsite-packagesgevent_socket3.py", line 534, in sendall
    return _socketcommon._sendall(self, data_memory, flags)
  File "c:usersg-us01.test.virtualenvscelery-z5n-38vtlibsite-packagesgevent_socketcommon.py", line 392, in _sendall
    timeleft = __send_chunk(socket, chunk, flags, timeleft, end)
  File "c:usersg-us01.test.virtualenvscelery-z5n-38vtlibsite-packagesgevent_socketcommon.py", line 321, in __send_chunk
    data_sent  = socket.send(chunk, flags)
  File "c:usersg-us01.test.virtualenvscelery-z5n-38vtlibsite-packagesgevent_socket3.py", line 515, in send
    return self._sock.send(data, flags)
ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host
  

Не удается понять, почему возникает эта ошибка.

Комментарии:

1. Возникает аналогичная проблема. Откуда вы знаете, что соединение прерывается из-за длительно выполняемой задачи? Какие-либо обновления?

2. @RobZ, моя фоновая задача выполняется около 2 часов. При изменении данных для запуска задачи в течение 45 минут или 1 часа оно не прерывалось, но когда оно выходило за рамки этого, я получал эту ошибку. Таким образом, альтернативой, которую я нашел, было то, что я проверяю состояние сельдерея в цикле while через определенные промежутки времени, и как только задача завершена, цикл завершается. Это решило мою проблему