首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Coding
V2EX  ›  程序员

Python 执行定时任务(cron)有什么好用的框架吗

  •  1
     
  •   mrchi · 349 天前 · 4443 次点击
    这是一个创建于 349 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前想写一些定时任务挂在服务器上,主要大概有两类:

    • 定时请求某些内容是否更新了,发送通知给我,比如” B 站罗小黑更新提醒“;
    • 定时实现一些动作,比如签到、领金币等等。

    看了一些框架:

    • rq-scheduler:基于 redis,核心开发者就 2 个人,open 的 issue 比较多,简单易上手,但功能不够全面,与 supervisor 集成的时候,error 日志和正常日志的输出是刚好调换的,尴尬;
    • apscheduler: 功能比较全面,支持各种数据库,拥有各种调度器,但是项目看起来不如 rq 活跃;
    • airflow: 文档有点难懂,apache 基金会的孵化项目,应该不会弃坑,胜在项目的发展;
    • Celery:可能是用的最广的框架了吧,但是去年他们有个时区 bug,拖了一年才发新版本修复,都不出 hotfix 的= =

    各位 v 友有什么建议吗?你们在项目中都是怎么做定时任务的?

    31 回复  |  直到 2018-12-27 13:29:07 +08:00
        1
    jadec0der   349 天前
    crontab
        2
    mrchi   349 天前
    @jadec0der 我想写一套东西,以后添加新定时任务的时候直接扔代码和运行配置就好了,再就是能够出错重试,然后对结果啥的能进行查看,crontab 的结果就只能往日志里写了吧
        3
    Kylin30   349 天前
    while true
        4
    xiexingjia   349 天前   ♥ 1
    huey
        5
    JasonYo   349 天前 via Android
    就 celery 吧?
        6
    Rebely   349 天前 via Android
    我觉得如果需求不是特别麻烦另类选一个简单的就好了😁
        7
    user919lx   349 天前   ♥ 1
    我是做数据开发的,需要处理大量的定时任务,还有重重复杂的依赖关系。
    很推荐用 Airflow,已经有非常多的公司在使用这个调度系统了,就调度这件事而言,我觉得它提供的功能已经非常全面了,足够满足你的需求。
    如果觉得官方文档比较难懂,可以参考我写的几篇博客,http://longfei.leanote.com/cate/bigdata 不过我这几篇都是概念和使用方法。如果你要想了解如何安装部署,要么看官方文档,要么就搜一下网络上的教程。
        8
    user919lx   349 天前
    按照你的需求, 部署 Airflow 配置个 LocalExecutor 就足够满足了。

    1. 写一套东西,以后添加新定时任务的时候直接扔代码和运行配置
    Airflow 的任务是用 Python 写的,你完全可以写成动态的形式,可以通过读取数据库或者 csv 文件来动态生成定时任务,事实上我在实践中经常这么用。

    2. 能够出错重试,然后对结果啥的能进行查看
    Airflow 提供 Web UI 界面,可以查看每个周期下的 task 的运行状态,还有完整的信息(执行时间、重试次数、运行日志等等),出错自动重试,可以发送邮件,并且有按钮能让你重试任务,连 ssh 登陆服务器都不需要。
        9
    smallgoogle   349 天前
    你这个直接就循环延时就行了。不需要用到啥定时器这些。
    另外的定时任务。我写了一个。不知道合不合适你。我也是搞了好久。
        10
    fonlan   349 天前 via Android
    直接装个 jenkins 不就行了,So easy
        11
    zmj1316   349 天前 via Android
    Jenkins +1 log 也够用 配置也方便
        12
    aniua   349 天前
    一个简单的方法:写个 Infinite loop,检查 Localtime,匹配上就执行动作。
        13
    claymore94   349 天前
    threading.Timer, 做一个递归调用函数
        14
    sunnyadamm   349 天前 via Android
    Python 内循环,服务器 nohup
        15
    ooeyunarika   349 天前
    lz 举例的这些框架是分布式定时任务的,如果只是执行 lz 这些需求,没啥必要

    内循环,python3 可以上 asyncio,或者直接用 crontab 就好了
        16
    rookiebulls   349 天前 via iPhone
    推荐 apscheduler,简单好用
        17
    Alfons   349 天前
        18
    sujin190   349 天前
    https://github.com/snower/forsun

    推荐下之前写的工具,系统定时器秒级定时,长时间运行无误差,支持 thrift 接口和 http 接口添加定时任务,redis 持久化任务,轻松管理千万级别定时任务处理,支持到期执行 shell、http、mysql、redis 等操作,也可以自己编写扩展添加执行器
        19
    matrix1010   349 天前 via Android
    其实 AWS lambda 和阿里云的函数都支持 cron, 每个月有免费额度,还有统计,报警等各种功能
        20
    meiyoumingzi6   349 天前 via Android
    罗小黑更新事件,几个月去轮询一次就好了🙃


    可以试试这个
    https://apscheduler.readthedocs.io/en/latest/
        21
    virusdefender   349 天前
    apscheduler 开发不活跃,但是绝对够用了,生产环境用了一段时间了
        22
    meiyoumingzi6   349 天前 via Android
    突然发现已经提到了🙃
        23
    babykiss4ever   349 天前
    用这个 https://github.com/dbader/schedule

    API 简洁,仿照自 Ruby 的 clockwork
        24
    SmiteChow   349 天前
    异步 /计划任务系统? Python ?只能是 Celery
        25
    chengxiao   349 天前
    https://www.v2ex.com/t/509485#reply24
    之前看到有人实现的分布式 cron 管理 就收藏了
        26
    richzhu   349 天前
    就 Celery 好了,想太多不累的嘛~
        27
    sunwei0325   349 天前
    awesome python 进去搜一下有好多
        28
    ibegyourpardon   349 天前
    介绍一个成品。。。

    https://gitee.com/georgehao/PPGo_Job
        29
    hunter2015   349 天前
    celery
        30
    HackerPainter   349 天前
    lugit
        31
    HackerPainter   349 天前
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2599 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 27ms · UTC 14:30 · PVG 22:30 · LAX 06:30 · JFK 09:30
    ♥ Do have faith in what you're doing.