配置celery以等待后端服务启动

Nir*_*Izr 6 python celery

当启动芹菜时,它重试连接到我的rabbitmq代理,这使它有必要的加载时间.这很好,因为我使用的是docker,我无法保证服务启动的顺序以及确切的服务时间.

然而,在尝试连接到我设置为结果后端的本地mysql服务器时,芹菜不使用相同的怜悯度量并立即死亡,合理地抱怨它无法锁定mysqld套接字:

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

我想在放弃之前配置芹菜重试几次,这可能吗?

谢谢!

geo*_*xsh 4

celery 在后台使用 sqlalchemy,它不具备开箱即用的连接重试功能,但是,您可以调整连接超时,以等待 mysql 服务器更长的时间,默认情况下该值只有 10 秒,较大的值会有所帮助。

假设您使用 pymysql/mysqldb 作为数据库驱动程序,它接受一个connect_timeout选项,要从 celery 指定此选项,您需要 set database_engine_options,它将传递给sqlalchemy 的函数create_engine,并且 set connect_args,它将直接从 sqlalchemy 传递给数据库驱动程序,例如:

app.conf.database_engine_options = {'connect_args': {'connect_timeout': 600}}
Run Code Online (Sandbox Code Playgroud)

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