推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
lecher23
V2EX  ›  Python

celery worker 资源初始化的问题

  •  
  •   lecher23 ·
    lecher23 · Sep 25, 2017 · 3048 views
    This topic created in 3179 days ago, the information mentioned may be changed or developed.
    Hi,请教大家一个问题:
    由于异步的 celery 任务依赖 MySQL 连接以及 Redis 连接,因此需要在 worker 启动后初始化这些连接信息,但是看网上的文档,celery 的 worker 启动的时候使用的是 prefork 的方式,如果初始化连接太早会导致多个进程使用的是同一个 MySQL 和 Redis 连接,这样因该是有问题的,那么各位都是在什么时候初始化连接的呢?
    3 replies    2017-09-30 11:08:14 +08:00
    rogwan
        1
    rogwan  
       Sep 25, 2017 via Android
    orm
    julyclyde
        2
    julyclyde  
       Sep 26, 2017
    没啥问题啊,就该使用同一个
    初始化部分不归你管,你写不了什么的
    wcsjtu
        3
    wcsjtu  
       Sep 30, 2017   ❤️ 1
    prefork 模式只是先 spawn 出子进程,这时候子进程就像一个空的 python interpreter。 然后你的代码会在每个子进程中 load 一次, 所以说每个子进程中的连接是独立的。
    mysql 的话,如果你使用了连接池,可以用 `show full processlist;`来查看当前的连接, 根据里面的端口查找进程, 你会发现 celery 各个子进程都有自己的连接。

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

    所以,问题答案`什么时候初始化连接的呢?`—— 依赖于你代码的实现
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5389 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 06:03 · PVG 14:03 · LAX 23:03 · JFK 02:03
    ♥ Do have faith in what you're doing.