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

求推荐一个Python的task queue / cron job系统

  •  
  •   keakon ·
    keakon · 2012-11-21 13:53:42 +08:00 · 8607 次点击
    这是一个创建于 4387 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大致需求如下:
    Web server为Tornado,所以希望将一些操作发送到其他服务器,异步去处理。
    操作不一定是立刻进行的,也许是设置了一个运行时间,到了才运行。
    该服务器可以保存这些请求,故障或重启后可以恢复,那些过了运行时间但还未运行的也会继续运行。失败可以继续重试。

    粗略看了下Celery,貌似符合,但是文档太多,没细看。
    还看了下RQ,文档很可怜,貌似没定时功能。
    最后看了下Beanstalkd,似乎更弱?

    于是头大中,求推荐=。=
    15 条回复    1970-01-01 08:00:00 +08:00
    bhuztez
        1
    bhuztez  
       2012-11-21 13:56:29 +08:00
    from mailbox import Maildir
    Nourl
        2
    Nourl  
       2012-11-21 16:34:18 +08:00
    zmq ?

    比较难的是“故障或重启后可以恢复”.
    Brutal
        3
    Brutal  
       2012-11-21 16:35:51 +08:00
    ...Redis?
    jerry
        4
    jerry  
       2012-11-21 16:37:13 +08:00   ❤️ 1
    一直用celery, 挺好的,很稳定,文档也很详细
    reorx
        5
    reorx  
       2012-11-21 16:53:57 +08:00   ❤️ 1
    Celery 可以的,不过他的功能受 broker 的限制。根据我的使用经历,RabbitMQ 和 Redis 作为 broker 可以满足楼主的需要,RabbitMQ 可以配置故障时数据落地,Redis 基本也不用担心数据丢失的问题。Celery 自身就有让任务失败重试的功能,具体操作楼主可以研究下文档:

    http://docs.celeryproject.org/en/latest/userguide/tasks.html#retrying

    其他的 brokers 没怎么用过,不过数据库是不被推荐的。
    dafang
        6
    dafang  
       2012-11-22 17:44:43 +08:00   ❤️ 1
    赞同@reorx,目前的系统正在用,同样是RabbitMQ和Redis做为broker。Redis用于收集任务结果,解决了RabbitMQ一个task result一个queue的问题。
    keakon
        7
    keakon  
    OP
       2012-11-22 18:59:08 +08:00
    @reorx
    @dafang 原来需要2个一起配合啊,看来得花不少时间了=。=
    est
        8
    est  
       2012-11-22 19:39:43 +08:00   ❤️ 1
    uwsgi 就可以做到大家所说的一切功能。过几天写个博客出来~~~
    Livid
        9
    Livid  
    MOD
       2012-11-22 19:43:12 +08:00
    定时运行这个貌似可以通过 Tornado 的 ioloop 来实现定时发送任务。

    至于其他要求,RQ 都可以满足。
    keakon
        10
    keakon  
    OP
       2012-11-22 20:01:59 +08:00
    @Livid Tornado 本身没有故障恢复啊,进程退出后就无法触发了
    zyAndroid
        11
    zyAndroid  
       2012-11-22 20:49:52 +08:00
    我司在用celery,还不错
    BigZ
        12
    BigZ  
       2012-11-22 22:25:09 +08:00
    建议你用mysql做,定时执行只需要加个crontab 脚本
    简单可靠
    keakon
        13
    keakon  
    OP
       2012-11-22 22:32:30 +08:00
    @BigZ crontab是重复执行的啊,我只需要执行一次。其实就是想设置一个时间,把mysql里的过期数据更新一下,但是又不适合定期更新。
    7gong
        14
    7gong  
       2012-11-22 22:57:01 +08:00
    @est 期待
    reorx
        15
    reorx  
       2012-11-23 00:52:25 +08:00
    @est 但它并不是最适合的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1044 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 20:36 · PVG 04:36 · LAX 12:36 · JFK 15:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.