Я использую 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.
Чтобы решить эту проблему, я использовал два варианта:
- Отключить пул соединений
- Добавление повторной попытки исключения ConnectionResetError
Любой другой элегантный способ, кроме отключения пула соединений, который может повлиять на производительность?