Python 芹菜工作者-连接已关闭错误

Python 芹菜工作者-连接已关闭错误,python,flask,celery,Python,Flask,Celery,我与Flask和远程芹菜工人一起工作,对于芹菜通信,我使用rabbitmq作为消息代理。 远程芹菜工人随机抛出错误,如下所示:- [2020-09-03 13:49:59,390: CRITICAL/MainProcess] Couldn't ack 20, reason:RecoverableConnectionError(None, 'connection already closed', None, '') Traceback (most recent call last): File

我与Flask和远程芹菜工人一起工作,对于芹菜通信,我使用rabbitmq作为消息代理。 远程芹菜工人随机抛出错误,如下所示:-

[2020-09-03 13:49:59,390: CRITICAL/MainProcess] Couldn't ack 20, reason:RecoverableConnectionError(None, 'connection already closed', None, '')
Traceback (most recent call last):
  File "c:\users\g-us01.test\.virtualenvs\celery_doors_integration-o4w-mxzx\lib\site-packages\kombu\message.py", line 131, in ack_log_error
    self.ack(multiple=multiple)
  File "c:\users\g-us01.test\.virtualenvs\celery_doors_integration-o4w-mxzx\lib\site-packages\kombu\message.py", line 126, in ack
    self.channel.basic_ack(self.delivery_tag, multiple=multiple)
  File "c:\users\g-us01.test\.virtualenvs\celery_doors_integration-o4w-mxzx\lib\site-packages\amqp\channel.py", line 1394, in basic_ack
    spec.Basic.Ack, argsig, (delivery_tag, multiple),
  File "c:\users\g-us01.test\.virtualenvs\celery_doors_integration-o4w-mxzx\lib\site-packages\amqp\abstract_channel.py", line 56, in send_method
    raise RecoverableConnectionError('connection already closed')
amqp.exceptions.RecoverableConnectionError: connection already closed
我用的是芹菜第四版。
任何关于如何避免此错误的指针都会很有帮助。

我在运行很长的任务时遇到了芹菜4.4.6版和rabbitmq版的相同问题。然后,我使用下面的配置更改运行相同的任务,现在它可以工作了(我以单独模式运行worker)。重要的配置似乎是代理心跳:。这将禁用心跳,并且不应因错过心跳而重置连接

CELERY_BROKER_HEARTBEAT = 0
链接到芹菜文档:

与Flask的集成应如下所示:

from flask import Flask
from celery import Celery

app = Flask(__name__)
app.config['CELERY_BROKER_URL'] =
                            'amqp://myuser:mypassword@localhost:5672/myvhost'
app.config['CELERY_BROKER_HEARTBEAT'] = 0

celery = Celery(app.name, broker=app.config['CELERY_BROKER_URL'])
celery.conf.update(app.config)

我可以在这里推荐这个博客(代码片段的源代码):

在运行很长的任务时,我对芹菜4.4.6版和rabbitmq也有同样的问题。然后,我使用下面的配置更改运行相同的任务,现在它可以工作了(我以单独模式运行worker)。重要的配置似乎是代理心跳:。这将禁用心跳,并且不应因错过心跳而重置连接

CELERY_BROKER_HEARTBEAT = 0
链接到芹菜文档:

与Flask的集成应如下所示:

from flask import Flask
from celery import Celery

app = Flask(__name__)
app.config['CELERY_BROKER_URL'] =
                            'amqp://myuser:mypassword@localhost:5672/myvhost'
app.config['CELERY_BROKER_HEARTBEAT'] = 0

celery = Celery(app.name, broker=app.config['CELERY_BROKER_URL'])
celery.conf.update(app.config)

我可以在这里推荐这个博客(代码片段的源代码):

我应该在哪里设置这个芹菜\u BROKER\u HEARTBEAT=0。您是否在任何配置文件中执行此操作?请阅读文档:在我的情况下,这是一个Django应用程序,此变量在settings.py文件中设置。我使用的是Flask,所以是否应在芹菜实例中设置此选项?例如:芹菜(backend='我为flask添加了一些代码。有关将芹菜与flask集成的更多信息,请查看引用的博客。可以确认这是要修复的解决方案。对于芹菜5x do``broker\u pool\u limit=None task\u acks\u late=True broker\u heartbeat=0 worker\u prefetch\u multiplier=1``我应该在哪里设置芹菜\u broker\u heartbeat=0。你认为呢您在任何配置文件中都这样做了吗?请阅读文档:在我的情况下,这是一个Django应用程序,该变量在settings.py文件中设置。我使用的是Flask,那么该选项是否应该在Celery实例中设置?例如:
Celery\u app=Celery(backend='我为flask添加了一些代码。有关将芹菜与flask集成的更多信息,请查看引用的博客。可以确认这是要修复的解决方案。对于芹菜5x do``broker\u pool\u limit=None task\u acks\u late=True broker\u heartbeat=0 worker\u prefetch\u乘数=1```