Celery worker connection with Rabittmq встретил ошибку обрыва трубы в режиме Gevent Mode

Этого не происходит в нашей среде dev, задачи там выполняются на гораздо меньшей базе данных, поэтому выдается гораздо меньше запросов к базе данных и внешних запросов, я предполагаю, что эта проблема может быть как-то связана с нагрузкой на задачи.

error:

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/celery/worker/consumer/consumer.py", line 246, in perform_pending_operations
    self._pending_operations.pop()()
  File "/usr/local/lib/python3.8/site-packages/vine/promises.py", line 160, in __call__
    return self.throw()
  File "/usr/local/lib/python3.8/site-packages/vine/promises.py", line 157, in __call__
    retval = fun(*final_args, **final_kwargs)
  File "/usr/local/lib/python3.8/site-packages/kombu/message.py", line 128, in ack_log_error
    self.ack(multiple=multiple)
  File "/usr/local/lib/python3.8/site-packages/kombu/message.py", line 123, in ack
    self.channel.basic_ack(self.delivery_tag, multiple=multiple)
  File "/usr/local/lib/python3.8/site-packages/amqp/channel.py", line 1407, in basic_ack
    return self.send_method(
  File "/usr/local/lib/python3.8/site-packages/amqp/abstract_channel.py", line 70, in send_method
    conn.frame_writer(1, self.channel_id, sig, args, content)
  File "/usr/local/lib/python3.8/site-packages/amqp/method_framing.py", line 186, in write_frame
    write(buffer_store.view[:offset])
  File "/usr/local/lib/python3.8/site-packages/amqp/transport.py", line 347, in write
    self._write(s)
  File "/usr/local/lib/python3.8/site-packages/gevent/_socketcommon.py", line 699, in sendall
    return _sendall(self, data_memory, flags)
  File "/usr/local/lib/python3.8/site-packages/gevent/_socketcommon.py", line 409, in _sendall
    timeleft = __send_chunk(socket, chunk, flags, timeleft, end)
  File "/usr/local/lib/python3.8/site-packages/gevent/_socketcommon.py", line 338, in __send_chunk
    data_sent += socket.send(chunk, flags)
  File "/usr/local/lib/python3.8/site-packages/gevent/_socketcommon.py", line 722, in send
    return self._sock.send(data, flags)
BrokenPipeError: [Errno 32] Broken pipe

Это моя команда по сельдерею:

celery -A analytics worker -P gevent -c 500 -l info -E --without-gossip --without-mingle --without-heartbeat &

и мои конфигурации Django:

CELERY_IGNORE_RESULT = True
CELERY_WORKER_PREFETCH_MULTIPLIER = 100
CELERY_WORKER_MAX_TASKS_PER_CHILD = 400
CELERYD_TASK_SOFT_TIME_LIMIT = 60 * 60 * 12
CELERYD_TASK_TIME_LIMIT = 60 * 60 * 13

Я также получал эти ошибки при использовании celery / rabbitmq / gevent workers. Я увеличил ресурсы на сервере, так что максимальное использование процессора составляет максимум около 50%, но все равно получаю эти ошибки.

Вернуться на верх