请教大家使用 celery 的问题

2016-01-14 12:07:51 +08:00
 111111111111

目前使用 /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 就很方便

1899 次点击
所在节点    Python
2 条回复
111111111111
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
2016-02-12 18:19:57 +08:00
$> ./manage.py celeryd -l info

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

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

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

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

© 2021 V2EX