Python 封装通过的 celery 服务 - V2EX
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
kayseen
V2EX    Python

Python 封装通过的 celery 服务

  •  
  •   kayseen 2019-08-06 10:19:30 +08:00 2985 次点击
    这是一个创建于 2272 天前的主题,其中的信息可能已经有所发展或是发生改变。
    需求: 1.在客户端使用 celery 的时候,将 celery 的任务使用 redis.lpush 存储到 redis 中(比如发送短信或者邮箱) 2.自己封装一个 celery 服务,将该 celery 服务跑在一个端口,使用 redis 的 rpop 实时监控是否有任务存在,如果有则处理 不知道我描述的够不够清楚,我现在不知道这个轮子应该怎么写,大家有没有之后的 demo 可以借鉴下啊 
    16 条回复    2019-08-08 17:39:16 +08:00
    SingeeKing
        1
    SingeeKing  
    PRO
       2019-08-06 10:21:28 +08:00
    你是不是对 Celery 有误解…… 它本身就可以自动监控是否有任务并处理,而且也可以用 Redis 做消息队列啊
    37Y37
        2
    37Y37  
       2019-08-06 10:25:08 +08:00
    celery 本身就是个异步处理框架,都帮你做好了,你只需要用就行了,不用关心 redis 队列,使用可参考:
    https://ops-coffee.cn/s/lXrp3igYo9W2UuE5Gauysg
    kayseen
        3
    kayseen  
    OP
       2019-08-06 10:26:27 +08:00
    @SingeeKing 我知道你的意思,但是现在需求就是写一个通用的 celery 服务,就是你在项目中使用到 celery 的时候,只往 redis 中存任务,你封装的 celery 就是时刻监控 redis 中的任务...通俗点把 celery 单独提出来写个服务
    leishi1313
        4
    leishi1313  
       2019-08-06 10:29:38 +08:00
    还是跟其他几楼一样,celery 本来就是这么用的啊。或者针对 redis,有其他的轮子也可以用:python-rq.org
    SingeeKing
        5
    SingeeKing  
    PRO
       2019-08-06 10:42:18 +08:00
    意义何在啊,你这本身就是重复造了个 Celery 啊

    你可以理解为 Celery 是一个消息队列的处理器、Redis 是一个消息队列; Celery 本身的作用就是「将任务存到 Redis 中」和「实时监控是否有任务存在,如果有则处理」,所以你现在的需求就是自己造一个 Celery

    那么。。回复你的问题:Celery 就是你要的 demo
    est
        6
    est  
       2019-08-06 10:43:45 +08:00
    额。。。。。
    youngce
        7
    youngce  
       2019-08-06 11:07:10 +08:00
    你的问题,就好比现在你已经有一个轮子了,你只看到了轮胎,想着自己还要做个轮毂,殊不知人家轮胎里,已经包好了一个豪华轮毂了
    AllenBigBear
        8
    AllenBigBear  
       2019-08-06 11:10:07 +08:00
    @37Y37 我也关注了你的公众号,有些问题想借楼问一下,我最近在部署 django 2.0,配合 supervisor,celery 4,gunicorn 和 redis


    部署的服务器是 1C1G5M 的良心云
    然后我如果 supervisor 里面单独启动 gunicorn (也就是只运行 django ),加载速度没问题
    但是如果我一并启动了 celery,服务器就一下子超卡。。
    不知道有没有碰到过类似的问题?谢谢!
    est
        9
    est  
       2019-08-06 11:13:54 +08:00
    @youngce celery 本身就是轮子套轮子。。比如 RabbitMQ 这个其实本身功能就够强大了。celery 自作聪明套了一层。。
    arrow8899
        10
    arrow8899  
       2019-08-06 11:15:12 +08:00
    django 开放一个 API 出来就行了,导入 django-celery 模块,调用这个 API 就可以往 celery 里写入任务,没必要再去加一层 redis。
    youngce
        11
    youngce  
       2019-08-06 11:18:38 +08:00
    @est 还行吧,毕竟 celery 也是支持用 redis 作为消息队列的,当初我对 RabbitMQ 不怎么了解的时候,项目里已经有了 redis,就直接 celery+redis 一把梭了。现在看起来的话,确实还有有很多可以改进的地方- -
    lolizeppelin
        12
    lolizeppelin  
       2019-08-06 11:25:34 +08:00
    请使用 oslo.messaging
    smallpython
        13
    smallpython  
       2019-08-06 11:28:48 +08:00
    楼上并没有在解决问题啊
    我的理解
    你说的客户端发送任务,服务器接收任务
    其实就是客户端把任务放到消息队列里,那么你的服务端就不需要开什么服务端口
    只需要 redis 端口开放出来就可以了
    想要实现这个功能只需要客户端和服务器的任务名称一样,指定的消息队列一样,剩下的 celery 会自动调度任务
    wd
        14
    wd  
       2019-08-06 13:21:33 +08:00 via iPhone
    @kayseen #3 celery 是可以独立运作的 看你说的是想自己往 broker 发消息应该也是可以的 可能需要你自己去看看实现的逻辑
    c9106
        15
    c9106  
       2019-08-07 08:31:05 +08:00
    朋友,celery flower 已经有 api 在那里了,只是简单了点,可以自己扩展
    fansfans
        16
    fansfans  
       2019-08-08 17:39:16 +08:00
    @smallpython 跟我想说的差不多,但是需要在客户端创建同样的任务名称 然后调用,虽然这个任务不需要实现,但是感觉还是会很鸡肋 。如果模拟 TaskProducer.publish_task 的实现 应该可以达到发送函数名执行的效果
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2469 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 05:21 PVG 13:21 LAX 22:21 JFK 01:21
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86