celery worker 资源初始化的问题

2017-09-25 15:22:06 +08:00
 lecher23
Hi,请教大家一个问题:
由于异步的 celery 任务依赖 MySQL 连接以及 Redis 连接,因此需要在 worker 启动后初始化这些连接信息,但是看网上的文档,celery 的 worker 启动的时候使用的是 prefork 的方式,如果初始化连接太早会导致多个进程使用的是同一个 MySQL 和 Redis 连接,这样因该是有问题的,那么各位都是在什么时候初始化连接的呢?
2238 次点击
所在节点    Python
3 条回复
rogwan
2017-09-25 15:43:47 +08:00
orm
julyclyde
2017-09-26 08:14:51 +08:00
没啥问题啊,就该使用同一个
初始化部分不归你管,你写不了什么的
wcsjtu
2017-09-30 11:08:14 +08:00
prefork 模式只是先 spawn 出子进程,这时候子进程就像一个空的 python interpreter。 然后你的代码会在每个子进程中 load 一次, 所以说每个子进程中的连接是独立的。
mysql 的话,如果你使用了连接池,可以用 `show full processlist;`来查看当前的连接, 根据里面的端口查找进程, 你会发现 celery 各个子进程都有自己的连接。

redis 的话,如果你的 redis 是用作 broker 的,那么子进程是不会直接连到 broker 的。如果 redis 用作业务存储,那么与 mysql 类似。

所以,问题答案`什么时候初始化连接的呢?`—— 依赖于你代码的实现

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/393454

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX