Избегайте ConnectionResetError: [Errno 104] Сброс соединения одноранговым узлом из celery.app.control - PullRequest
0 голосов
/ 27 мая 2020

Я использую celery.app.control в коде python. Код гарантирует, что от предыдущего выполнения не осталось задач с сельдереем (используется команда отмены) перед запуском новых.

Python: 3.6.10
Celery: 4.1.0

RabbitMQ как брокер сообщений

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

message: Failed revoking task *************************************, Exception: Traceback (most recent call last):

  File "/usr/local/lib/python3.6/site-packages/celery/app/control.py", line 210, in revoke
    }, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/celery/app/control.py", line 436, in broadcast
    limit, callback, channel=channel,
  File "/src/kombu/kombu/pidbox.py", line 315, in _broadcast
    serializer=serializer)
  File "/src/kombu/kombu/pidbox.py", line 290, in _publish
    serializer=serializer,
  File "/src/kombu/kombu/messaging.py", line 181, in publish
    exchange_name, declare,
  File "/src/kombu/kombu/messaging.py", line 203, in _publish
    mandatory=mandatory, immediate=immediate,
  File "/usr/local/lib/python3.6/site-packages/amqp/channel.py", line 1748, in _basic_publish
    (0, exchange, routing_key, mandatory, immediate), msg
  File "/usr/local/lib/python3.6/site-packages/amqp/abstract_channel.py", line 64, in send_method
    conn.frame_writer(1, self.channel_id, sig, args, content)
  File "/usr/local/lib/python3.6/site-packages/amqp/method_framing.py", line 178, in write_frame
    write(view[:offset])
  File "/usr/local/lib/python3.6/site-packages/amqp/transport.py", line 272, in write
    self._write(s)
ConnectionResetError: [Errno 104] Connection reset by peer

После проверки кода я обнаружил, что пул соединений б / у под капотом. Следовательно, ни отправка пульса, ни соединение не использовались более 60 секунд. Соединение закрывается RabbitMQ.

Чтобы решить эту проблему, я использовал два варианта:

  1. Отключить пул соединений
  2. Добавление повторной попытки исключения ConnectionResetError

Любой другой элегантный способ, кроме отключения пула соединений, который может повлиять на производительность?

...