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
Feiox
V2EX  ›  Python

如何将 Celery 服务作为一个子进程运行在一个主(守护)进程之下?

  •  
  •   Feiox ·
    feiox · 2015-06-08 23:20:03 +08:00 · 2877 次点击
    这是一个创建于 3467 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在有这样一个需求:
    已有一个主进程,以 daemon 形式运行,现在需要启动一个 Celery 服务,运行在一个独立子进程中(即它与主进程之间并无实际联系,该干嘛干嘛,只是需要随主进程启动而启动,关闭时关闭)。
    以前都是以命令行或 Supervisor 运行,但现在应该怎么搞?

    8 条回复    2015-06-10 20:57:20 +08:00
    fatpa
        1
    fatpa  
       2015-06-08 23:46:07 +08:00
    supervisor 难道搞不定这需求么?还是说必须跳开 supervisor?
    neoblackcap
        2
    neoblackcap  
       2015-06-09 00:06:25 +08:00
    同楼上我也一下子想到supervisor。这不是他们该干的事吗?还有重新发明轮子,你再不济就上systmed或者自己撸一个呗,记得好像是APUE里面有一个超级经典的守护进程例子,可以自己去看看然后就开撸
    Feiox
        3
    Feiox  
    OP
       2015-06-09 00:29:10 +08:00
    @neoblackcap @fatpa 可能我的表达有问题,我是需要将 celery 作为一个子进程挂在 daemon 上。而不是作为一个系统服务跑。
    neoblackcap
        4
    neoblackcap  
       2015-06-09 11:00:20 +08:00
    @Feiox 那么就是说daemon是你写的罗?那去看APUE就对了,具体的我也不记得了,要不你在网上搜一下就有了,超级简单明了的,记得就是两步而已,好像他们的代码是C的,但是你去搜搜就有了。一般就是多进程什么的开起来就好了

    而且celery用supervisor也不是系统服务啊,supervisor就是一个daemon而已,celery是它下面的一个子进程
    fatpa
        5
    fatpa  
       2015-06-09 21:23:50 +08:00
    有点绕,大概懂了
    Feiox
        6
    Feiox  
    OP
       2015-06-10 19:31:16 +08:00
    @neoblackcap @fatpa 额,并不是这个意思。举个例子说吧,我在使用 python 做单元测试的时候,Flask 作为项目主体,并使用 celery 作为异步队列。现在我需要测试他们,需要在执行 py.test unit 的时候不仅构建了 Flask app 上下文环境,也启动了 celery 用于执行任务。现在 CI 的时候,怎么样在测试主进程外启动一个 Celery,使其能实际执行任务,在测试结束的时候自动停止呢?
    neoblackcap
        7
    neoblackcap  
       2015-06-10 19:56:33 +08:00
    @Feiox 何不写桩函数?至于异步任务测试另外写。
    Feiox
        8
    Feiox  
    OP
       2015-06-10 20:57:20 +08:00
    @neoblackcap 因为是一个整体。。。在主线函数运行过程中必须要执行特定的异步函数,这样才能在集成测试中(也有些在单元测试中)完成对整个业务流程的测试。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1042 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 199ms · UTC 19:30 · PVG 03:30 · LAX 11:30 · JFK 14:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.