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

还在用老掉牙的 celery? 换 dramatiq 试试。

  •  2
     
  •   est ·
    est · 2017-12-28 16:36:52 +08:00 · 7798 次点击
    这是一个创建于 2304 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有多年专业 celery 使用经验的罗马尼亚工程师 Bogdan Popa 觉得 Celery 就是个大烂坑。于是又发明了个 python 异步任务框架轮子 dramatiq

    https://dramatiq.io/motivation.html

    受到 sidekiq 的启发。对标 celery 和 python-rq (redi queue)
    第 1 条附言  ·  2017-12-28 17:26:50 +08:00
    注意坑的一点是协议是 AGPL 的。。。。商业另外授权
    29 条回复    2020-05-11 15:55:34 +08:00
    myyou
        1
    myyou  
       2017-12-28 17:07:31 +08:00
    不错, 好东西
    clino
        2
    clino  
       2017-12-28 17:10:56 +08:00
    名字起的不太好...
    wibile
        3
    wibile  
       2017-12-28 17:12:56 +08:00
    @clino dramatic。。。。不错了
    ty89
        4
    ty89  
       2017-12-28 17:14:30 +08:00
    sidekiq 好用的一逼,自从转到 ROR,脱发都少了
    clino
        5
    clino  
       2017-12-28 17:14:44 +08:00
    @wibile #3 原来是酱
    wcsjtu
        6
    wcsjtu  
       2017-12-28 17:38:20 +08:00
    不兹次 py2, 差评啊
    inflationaaron
        7
    inflationaaron  
       2017-12-28 18:04:27 +08:00 via iPhone
    Actor 模型……怕不是想学 akka
    swulling
        8
    swulling  
       2017-12-28 18:06:53 +08:00
    AGPL 的话,你的服务要是依赖了这个库,并且对外提供服务。。那么你的全部代码都要 AGPL 出来

    MongoDB 也只是数据库部分用 AGPL,各个语言的 sdk 不是。

    一个依赖库用 AGPL 的,还是第一次见到,用 GPL 的都少见,用用 LGPL 还算可以。。
    timonwong
        9
    timonwong  
       2017-12-28 18:31:47 +08:00
    看到 Prometheus Metrics 得友情 +1
    janxin
        10
    janxin  
       2017-12-28 19:39:27 +08:00 via iPhone
    协议不友好对洁癖来说有障碍呀,虽然 celery 是很坑
    chenqh
        11
    chenqh  
       2017-12-28 21:42:29 +08:00 via iPhone
    虽然觉得 celery 复杂但是不想换
    guog
        12
    guog  
       2017-12-28 22:24:01 +08:00 via Android
    @wcsjtu 我觉得恰好相反,不支持 py2 才是好评😁
    golmic
        13
    golmic  
       2017-12-28 22:46:27 +08:00 via Android
    @guog 支持。
    misaka19000
        14
    misaka19000  
       2017-12-28 22:56:53 +08:00
    问题是服务端代码如果我不开源外界没有办法知道我使用了该组件
    neoblackcap
        15
    neoblackcap  
       2017-12-28 23:01:13 +08:00
    居然这么多人觉得 celery 坑,的确 celery 的文档不怎么行。不过功能它倒是蛮强大。比如用 celery 就可以使用 pipeline + 不同类型的 worker 完成很多工作,代码可以简单地在一个地方整合。维护者可以简单地看出是如何被调用的。目前这个项目还是缺少对应的功能。
    est
        16
    est  
    OP
       2017-12-28 23:19:11 +08:00
    @misaka19000 不知道没关系,等别人知道了你想换的时候已经晚了。
    rogwan
        17
    rogwan  
       2017-12-28 23:23:55 +08:00 via Android
    @neoblackcap celery 的异步队列是不是每次更新,都要重启整个 Linux 服务器?貌似只重启 uwsgi 经常造成队列假死
    find456789
        18
    find456789  
       2017-12-29 00:10:33 +08:00
    搭车问问, pip install -U dramatiq[rabbitmq, watch] 后面跟了个 [] 括号,是什么语法糖
    neoblackcap
        19
    neoblackcap  
       2017-12-29 10:50:22 +08:00   ❤️ 1
    @rogwan 不是,你可以重启对应的 worker。建议你还是使用 systemd 来管理 celery,独立地启动关闭
    julyclyde
        20
    julyclyde  
       2017-12-29 10:58:19 +08:00
    @wcsjtu 不支持 py2 是加分项啊!可以主动淘汰 py2
    frostming
        21
    frostming  
       2017-12-29 11:12:25 +08:00
    @find456789 setup 函数里的 extra_requires,按需安装。看看 setuptools 的文档就知道了。
    fwee
        22
    fwee  
       2017-12-29 12:50:51 +08:00
    这协议和商业方式才是受到 sidekiq 启发吧
    fwee
        23
    fwee  
       2017-12-29 12:51:39 +08:00
    不对。。这协议比 sidekiq 狠啊
    allenling
        24
    allenling  
       2018-01-04 17:06:46 +08:00 via iPhone
    纯比速度的话~~未必吧
    https://github.com/allenling/magne
    est
        25
    est  
    OP
       2018-01-04 18:37:46 +08:00
    @allenling 这是你自己的轮子?

    我没理解错的话,magne 就是同进程用 curio 去 spawn 一个单独的 coroutine 去处理异步任务?
    allenling
        26
    allenling  
       2018-01-05 20:00:15 +08:00 via iPhone
    @est 嗯嗯~之前老早就像替掉 celery 了,代码看吐了~~然后测试了一下协程的情况~~

    我的思路是:每当有一个任务进来,就 spawn 一个协程去执行,所以基本上可以达到上千个协程”同时”执行~~
    要发挥到协程 spawn 很便宜的特性
    allenling
        27
    allenling  
       2018-01-05 20:09:23 +08:00 via iPhone
    @est 我 GitHub 重新整理了一下,把 dramatiq-gevent 的测试,和多进程协程测试的情况加了进去
    hanssx
        28
    hanssx  
       2020-05-11 15:22:33 +08:00
    celery 确实是坑,各种未解决 bug,直接报错报到 celery 本身的代码错误,比如这个未解决的问题,https://github.com/celery/celery/issues/3773
    est
        29
    est  
    OP
       2020-05-11 15:55:34 +08:00
    @hanssx 看上去就是连接已断开的问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   990 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 22:43 · PVG 06:43 · LAX 15:43 · JFK 18:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.