创建了 Celery 的定时任务, 可是发现时间间隔很随机

2015-03-24 09:05:35 +08:00
 RangerWolf
作为测试,弄了一个git pull 定时任务。预设时间是300秒一次。可是从结果来看,时间间隔有5分钟、10分钟、15分钟等等。

broker用的是redis,不知道是不是这个原因造成的?
目前数据很少啊~ 就两三个定时任务。
6430 次点击
所在节点    Python
11 条回复
yueyoum
2015-03-24 10:20:00 +08:00
我当时也学过一段时间 celery ,但是没学会。
果断放弃

可用来替代celery的东西很多。
no13bus
2015-03-24 10:28:02 +08:00
@yueyoum 比如?我知道的是rq,但是不能并发执行任务。
no13bus
2015-03-24 10:28:46 +08:00
这个和redis没关系。
hahastudio
2015-03-24 10:42:59 +08:00
我猜可能的原因是有的时候 5 min 并没有做完?
wph95
2015-03-24 11:10:50 +08:00
@yueyoum 是否能介绍介绍用什么替代了celery 。。。
RangerWolf
2015-03-24 11:21:32 +08:00
@hahastudio 你猜的不对:D task的receive time 就不对了~ 每次执行完成的时间不到1秒钟


@no13bus 官方说redis会丢数据。 我以为数据量小的是没关系~ 我再试试看rabitt mq

@yueyoum 你用什么代替的?同问
0bit
2015-03-24 11:23:06 +08:00
我觉着 @hahastudio 猜的可能是对的,Celery的定时只能是保证在那个时间点之后可用,但是你的worker当时可能没忙完别的,你可以监控一下worker的执行,或者多开几个worker试试
no13bus
2015-03-24 11:35:33 +08:00
celery -A myproject worker -P gevent -c 1000 -l info

这个命令试试。
我知道的定时任务有这些: https://github.com/vinta/awesome-python#job-scheduler
但是我觉得都没有celery功能强大。你的任务应该是很基本的,贴一下你的celery的setting和命令。干说说不出啥来。
RangerWolf
2015-03-24 12:20:33 +08:00
lxyu
2015-03-24 13:00:19 +08:00
celery 是队列,就不是用来当 cron 用的。celery beat 只是把任务放到了池子里,但是什么时候执行?什么时候执行完?都要看 worker。如果要 debug,可以看 worker 的日志,看当时任务的执行情况和 worker 的情况,也可以在 gitpull 的前后打下日志。

“队列”本身就意味着不定时,如果要做定时任务还是用 cron 吧。
RangerWolf
2015-03-24 13:51:45 +08:00
@lxyu 好吧 原来是这样~ 多谢指导!

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

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

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

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

© 2021 V2EX