python - 配置celery等待后端服务启动

标签 python celery

启动 celery 时,它会重试连接到我的 rabbitmq 代理,这会为其提供必要的加载时间。这很好,因为我使用的是 docker,我无法保证服务启动的顺序以及确切的服务启动时间。

然而,在尝试连接到我设置为结果后端的本地 mysql 服务器时,celery 没有使用相同的仁慈措施并立即死亡,合理地提示它无法锁定 mysqld 套接字:

OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")

我想配置celery在放弃前重试几次,可以吗?

谢谢!

最佳答案

celery 在后台使用 sqlalchemy,它不附带开箱即用的连接重试功能,但是,您可以调整连接超时,以等待 mysql 服务器更长的时间,默认情况下该值仅为 10s,较大的值有帮助.

假设您使用 pymysql/mysqldb 作为数据库驱动程序,它接受 connect_timeout选项,要从 celery 中指定此选项,您需要设置 database_engine_options ,这将是 passed to create_engine sqlalchemy 函数,并设置connect_args , 它将直接从 sqlalchemy 传递到 DB 驱动程序,例如:

app.conf.database_engine_options = {'connect_args': {'connect_timeout': 600}}

另一种选择是使用自定义连接 creator功能,由您自己管理连接创建,您可以随时重试。

关于python - 配置celery等待后端服务启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45790652/

相关文章:

python - 无法理解 pandas 中的预测算法

python - 在满足x个条件后播放音频(Python-Pygame)

python - python 中 string.partition 的良好实践

python - 为什么打印 5 次之后的索引会被更改和截断?

python - 签名集上的 celery 最大重试未更新

python - celery 。获取当前链的id

django - 接收 celery 任务中的事件

python raw_input def 输入问题

python - 无法启动 Celery Worker (Kombu.asynchronous.timer)

python - 在所有任务完成后运行任务