примерно через 2-3 минуты сельдерей выбрасывает следующую трассировку:
File "c:\program files (x86)\lib\site-packages\eventlet\hubs\selects.py", line 55, in wait
listeners.get(fileno, noop).cb(fileno)
[2019-06-29 20:38:09,849: WARNING/MainProcess] File "c:\program files (x86)\lib\site-packages\celery\worker\pidbox.py", line 120, in loop
connection.drain_events(timeout=1.0)
[2019-06-29 20:38:09,849: WARNING/MainProcess] File "c:\program files (x86)\lib\site-packages\kombu\connection.py", line 315, in drain_events
return self.transport.drain_events(self.connection, **kwargs)
[2019-06-29 20:38:09,849: WARNING/MainProcess] File "c:\program files (x86)\lib\site-packages\kombu\transport\pyamqp.py", line 103, in drain_events
return connection.drain_events(**kwargs)
[2019-06-29 20:38:09,849: WARNING/MainProcess] File "c:\program files (x86)\lib\site-packages\amqp\connection.py", line 500, in drain_events
while not self.blocking_read(timeout):
[2019-06-29 20:38:09,849: WARNING/MainProcess] File "c:\program files (x86)\lib\site-packages\amqp\connection.py", line 505, in blocking_read
frame = self.transport.read_frame()
[2019-06-29 20:38:09,849: WARNING/MainProcess] File "c:\program files (x86)\lib\site-packages\amqp\transport.py", line 252, in read_frame
frame_header = read(7, True)
[2019-06-29 20:38:09,849: WARNING/MainProcess] File "c:\program files (x86)\lib\site-packages\amqp\transport.py", line 444, in _read
[2019-06-29 20:38:09,849: WARNING/MainProcess] OSError: Server unexpectedly closed connection
[2019-06-29 20:38:09,849: WARNING/MainProcess] Removing descriptor: 1044
Тем не менее, работник текущей задачи продолжает свою работу. Но в моем веб-приложении я постоянно опрашиваю URL, чтобы получать обновления текущей задачи. После того, как вышеупомянутая ошибка происходит, соединение с RabbitMQ кажется закрытым, так что приложение больше не может получить доступ к бэкенду результата (также RabbitMQ).
Я потратил много времени на выяснение того, что именно может вызвать эту ошибку. Я пришел к очень расплывчатому выводу, что это может быть связано с тем, что работник (в данный момент использующий: eventlet, потому что работает в Windows) не может отправлять тактовые импульсы в RabbitMQ.
Но я запутался, потому что некоторые советуют настроить значение Heartbeat на 0 (что я и сделал, как вы можете увидеть ниже в моей конфигурации). Также это не решает проблему.
Это моя текущая конфигурация, которая является своего рода отчаянной путаницей всех лучших советов по github и stackoverflow:
CELERY_BROKER_URL = 'pyamqp://'
CELERY_RESULT_BACKEND = 'amqp://'
CELERY_BROKER_TRANSPORT_OPTIONS = {'confirm_publish': True}
CELERY_BROKER_HEARTBEAT = 0
CELERY_BROKER_POOL_LIMIT = None
CELERY_BROKER_TRANSPORT_OPTIONS = {'confirm_publish': True}
CELERY_BROKER_CONNECTION_TIMEOUT = 20
CELERY_BROKER_CONNECTION_RETRY = True
CELERY_BROKER_CONNECTION_MAX_RETRIES = 100
CELERY_TIMEZONE = 'UTC'
CELERY_ENABLE_UTC = True
CELERY_IGNORE_RESULT = False
SQLALCHEMY_DATABASE_URI = userpass + basedir + dbname
SQLALCHEMY_TRACK_MODIFICATIONS = False
Я ожидаю, что соединение между RabbitMQ и Celery стабильно и не возникает ошибка соединения.
Самая большая проблема для меня на данный момент в том, что я абсолютно не знаю, что именно вызывает ошибка. Это работник не посылает сердцебиение в RabbitMQ? Это сам RabbitMQ?
Я очень рад за любой намек.
EDIT :
Забыл упомянуть, что я также читал, что это связано с именем хоста.
Я начинаю сельдерей с:
сельдерей -A task.celery работник --loglevel = информация --pool = eventlet - без смешивания - без сплетни - без сердцебиения
и он работает на локальном хосте (веб-сервер работает через XAMPP).
Если я проверяю консоль RabbitMQ, то это не "rabbit @ localhost", а "rabbit @ DESKTOP-xxxx". Может быть, это приводит к ошибке?