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

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

  •  
  •   RangerWolf · 2015-03-24 09:05:35 +08:00 · 6453 次点击
    这是一个创建于 3536 天前的主题,其中的信息可能已经有所发展或是发生改变。
    作为测试,弄了一个git pull 定时任务。预设时间是300秒一次。可是从结果来看,时间间隔有5分钟、10分钟、15分钟等等。

    broker用的是redis,不知道是不是这个原因造成的?
    目前数据很少啊~ 就两三个定时任务。
    第 1 条附言  ·  2015-03-24 12:20:06 +08:00
    定义5分钟一次celery.py
    https://gitcafe.com/rangerwolf/CeleryDemoProjects/blob/master/proj_mgr/celery.py

    定义具体任务的tasks.py
    https://gitcafe.com/rangerwolf/CeleryDemoProjects/blob/master/proj_mgr/tasks.py
    其中最后一个 git_pull 是需要每5分钟执行一次的函数
    第 2 条附言  ·  2015-03-25 21:57:38 +08:00
    应该是找到原因了
    我总共有两个不同的worker,但是他们共享一个broker。估计就是这样造成了冲突。
    11 条回复    2015-03-24 13:51:45 +08:00
    yueyoum
        1
    yueyoum  
       2015-03-24 10:20:00 +08:00
    我当时也学过一段时间 celery ,但是没学会。
    果断放弃

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


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

    @yueyoum 你用什么代替的?同问
    0bit
        7
    0bit  
       2015-03-24 11:23:06 +08:00
    我觉着 @hahastudio 猜的可能是对的,Celery的定时只能是保证在那个时间点之后可用,但是你的worker当时可能没忙完别的,你可以监控一下worker的执行,或者多开几个worker试试
    no13bus
        8
    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
        9
    RangerWolf  
    OP
       2015-03-24 12:20:33 +08:00
    lxyu
        10
    lxyu  
       2015-03-24 13:00:19 +08:00   ❤️ 1
    celery 是队列,就不是用来当 cron 用的。celery beat 只是把任务放到了池子里,但是什么时候执行?什么时候执行完?都要看 worker。如果要 debug,可以看 worker 的日志,看当时任务的执行情况和 worker 的情况,也可以在 gitpull 的前后打下日志。

    “队列”本身就意味着不定时,如果要做定时任务还是用 cron 吧。
    RangerWolf
        11
    RangerWolf  
    OP
       2015-03-24 13:51:45 +08:00
    @lxyu 好吧 原来是这样~ 多谢指导!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6013 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 06:15 · PVG 14:15 · LAX 22:15 · JFK 01:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.