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

2012-11-21 13:53:42 +08:00
 keakon
大致需求如下:
Web server为Tornado,所以希望将一些操作发送到其他服务器,异步去处理。
操作不一定是立刻进行的,也许是设置了一个运行时间,到了才运行。
该服务器可以保存这些请求,故障或重启后可以恢复,那些过了运行时间但还未运行的也会继续运行。失败可以继续重试。

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

于是头大中,求推荐=。=
8598 次点击
所在节点    Python
15 条回复
bhuztez
2012-11-21 13:56:29 +08:00
from mailbox import Maildir
Nourl
2012-11-21 16:34:18 +08:00
zmq ?

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

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

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

至于其他要求,RQ 都可以满足。
keakon
2012-11-22 20:01:59 +08:00
@Livid Tornado 本身没有故障恢复啊,进程退出后就无法触发了
zyAndroid
2012-11-22 20:49:52 +08:00
我司在用celery,还不错
BigZ
2012-11-22 22:25:09 +08:00
建议你用mysql做,定时执行只需要加个crontab 脚本
简单可靠
keakon
2012-11-22 22:32:30 +08:00
@BigZ crontab是重复执行的啊,我只需要执行一次。其实就是想设置一个时间,把mysql里的过期数据更新一下,但是又不适合定期更新。
7gong
2012-11-22 22:57:01 +08:00
@est 期待
reorx
2012-11-23 00:52:25 +08:00
@est 但它并不是最适合的。

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

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

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

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

© 2021 V2EX