V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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
111111111111
V2EX  ›  Python

请教大家使用 celery 的问题

  •  
  •   111111111111 · 2016-01-14 12:07:51 +08:00 · 2035 次点击
    这是一个创建于 3239 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前使用 /etc/init.d/celeryd 做守护进程

    在实践中遇到一些问题:

    django 项目, celery == 3.1.12

    更新代码后需要重启 worker 来加载新代码

    但是 /etc/init.d/celeryd 脚本只可以用 root 执行,每次更新代码都切到 root 感觉这样不合理,但是 google 了很久没有找到合适的方法


    尝试的方法:

    1. --autoreload ,

      启动参数加 autoreload ,按照文档上的说法会重新加载 tasks 文件的,但是并没有看到效果

    2. kill -HUP :

      对主进程 pid 用 HUP ,会退出程序。对子进程使用 HUP ,倒是正常重启,但是多个进程操作起来麻烦

    3. celery multi :

      使用 celery multi 启动 worker ,可以使用 celery multi 来重启,不需要 root 权限,但是在实践中不论是启动还是重新,都需要加一串参数。

      写成脚本可能比较方便,没有更好的方式办法的话,会选择这个

    4. supervisord :
      下一步尝试这个,没有用过 supervisord ,只知道进程挂掉的时候他可以让进程重新跑起来。打算在更新代码之后 kill 掉 worker 主进程,然后由 supervisord 启动


    请教大家在实践中:

    有什么比较好,比较方便的方式来管理 celery ,尤其是更新代码之后加载新代码

    像 uwsgi 的 kill -HUP 就很方便

    2 条回复    2016-02-12 18:19:57 +08:00
    111111111111
        1
    111111111111  
    OP
       2016-01-16 15:15:10 +08:00
    居然没人回答,自己来填坑...

    看了一遍 celeryd 里的内容,发现这货也是用 celery multi 的方式来启动进程,练习的时候知道 celery multi 是可以用非 root 执行的,。

    接下来就好办了,把他改成不需要 root 的样子,
    一、新建 celeryd 到 home 目录里,

    二、注释掉两个地方:
    1. 第 33 行,用户身份检查
    2. 第 107 行,对配置文件的检查

    三、_chuid()函数中的
    ```# su "$CELERYD_USER" -c "$CELERYD_MULTI $*"` ``
    改为
    ```$CELERYD_MULTI $*```

    这样就可以用脚本来管理 celery 了

    ----

    另外发现, celery multi resart 的执行结果启动了新的进程,不是-HUP 的方式,之前在文档了也看到说-HUP 的方式不被推荐。
    主进程收到-HUP 信号会退出,但是子进程还是可以重新启动加的
    wuyu1998
        2
    wuyu1998  
       2016-02-12 18:19:57 +08:00
    $> ./manage.py celeryd -l info
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1361 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 23:39 · PVG 07:39 · LAX 15:39 · JFK 18:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.