大家好
是这样的
就是我想建立一个celery任务,用来做某个事情, 需要每个5分钟运行
但是如果用一般的方法,假如这个任务有时候运行后,执行的时间大于了5分钟,那么它还没结束,celery又运行了一个任务,这样的话 就有2个一样的任务再运行了 我不想让这样的事情发生
我希望的是,无论如何 ,这个任务,同时,只能运行一次
于是我就发这个帖子来请教大家
比如任务名字叫 getName, 设置他每5分钟运行,这个任务是去爬某些数据,有时候,可能10秒就完成了, 有时候可能要10分钟
假如我 10点00分运行了getName,它本次可能要执行10分钟,那么当时间到了10点05分,celery如果开启第二个getName, 那么在10点06分的时候,就有2个getName在运行
我想的是, 能不能按照结束时间来算,比如 第一个getName是10点00分开启的,那么只要他没有结束,那么不管时间过去了多久,就都不开启新的任务; 比如时间过去了10分钟,到了10点10分,getName结束了,这时候celery开始计时。5分钟后,开始进行第二轮的celery运行
如此就可以达到互斥的效果
之前有朋友推荐我用 celery once [http://engineroom.trackmaven.com/blog/announcing-celery-once/] ,不过好像这个东西 不能实现我这样的效果哦
请问大家有什么好的方案吗
1
kier 2015-03-08 17:49:22 +08:00
为什么不用crontab执行呢?脚本做成单例的就行
|
2
yakiang 2015-03-08 17:55:06 +08:00
|
3
9xrtp7r1 OP @kier 谢谢 不过我感觉crontab 比较不太灵活,不太好迁移 因为我有个开发环境在虚拟机,正式环境在aws云上, 我每次都是开发好了,直接git 上传, 然后到aws上git 下载 ,我的项目代码都会重新自动运行最新代码, crontab 能用git同步吗,我开发环境里 修改了,正式环境 git pull后,需要手动去做什么修改吗
|
5
lupino 2015-03-09 13:56:29 +08:00
用定时 [任务系统](https://github.com/Lupino/periodic) 好像会简单一点
|