前段时间用有优先级和线程池做了可控的计划任务模块。正好今还在看gevent wsgi的东西,在想用gevent能不能实现计划任务系统。 看了下gevent的文档,发现他没有现成那样的timer功能,但是有个spawn_later的功能。 spawn_later函数可接收周期时间及运行函数。 

简单说,用gevent.spawn_later就可以实现crontab的效果…..


python gevent开发定时任务系统,原文地址是,http://xiaorui.cc/?p=2032



我前两天用gevent spawn_later函数,做了个小定时任务系统。

项目我已经推送到github上了, https://github.com/rfyiamcool/GeventCron

GeventCron

原理:

gevent cron是一个利用gevent开发的定时任务系统,模块不大,五藏俱全,还支持动态的添加任务和关闭任务.

他的缺点就是,太依赖gevent的调度了,所以如果你逻辑里面采用的是堵塞模块,那么定时任务的执行时间都要乱掉…..所以尽量让你业务逻辑,采用gevent patch过的模块。比如subprocess,换成gevent subprocess .

使用方法:

主要的事情说三遍,不要用让gevent阻塞的模块,不要用堵塞的模块,不要用堵塞的模块… O(∩_∩)O~

(这两天有人用了我这模块发生了io堵塞…. )


下次我会把线上正在使用的定时任务系统,分享下。。。 功能很像celery,rq那样,把函数跟类字符串化,支持线程、进程选择。



对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!
{ 2000人qq大群内有各厂大牛,常组织线上分享及沙龙,对高性能及分布式场景感兴趣同学欢迎加入该QQ群 }

另外如果大家觉得文章对你有些作用!   帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址  xiaorui.cc  ……   感谢!
暂无相关产品

4则回应给“使用gevent spawn_later实现定时计划任务系统”

  1. bug反馈说道:

    大兄弟,我提了一个问题,有时间的话回复我一下吧,我先吧waiting去掉了:https://github.com/rfyiamcool/GeventCron/issues/1;我的邮箱:pengyusong2012@126.com

  2. gg说道:

    涉及到阻塞咋办好,把executor作为服务独立出来?

发表评论