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

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

  •  1
     
  •   mrchi ·
    mrchi · 2018-12-27 00:33:16 +08:00 · 7130 次点击
    这是一个创建于 2152 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    看了一些框架:

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

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

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

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

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

    内循环,python3 可以上 asyncio,或者直接用 crontab 就好了
    rookiebulls
        16
    rookiebulls  
       2018-12-27 09:28:02 +08:00 via iPhone
    推荐 apscheduler,简单好用
    Alfons
        17
    Alfons  
       2018-12-27 09:30:17 +08:00
    sujin190
        18
    sujin190  
       2018-12-27 09:44:41 +08:00
    https://github.com/snower/forsun

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


    可以试试这个
    https://apscheduler.readthedocs.io/en/latest/
    virusdefender
        21
    virusdefender  
       2018-12-27 09:49:12 +08:00
    apscheduler 开发不活跃,但是绝对够用了,生产环境用了一段时间了
    meiyoumingzi6
        22
    meiyoumingzi6  
       2018-12-27 09:50:06 +08:00 via Android
    突然发现已经提到了🙃
    babykiss4ever
        23
    babykiss4ever  
       2018-12-27 10:10:19 +08:00
    用这个 https://github.com/dbader/schedule

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

    https://gitee.com/georgehao/PPGo_Job
    hunter2015
        29
    hunter2015  
       2018-12-27 12:06:41 +08:00
    celery
    HackerPainter
        30
    HackerPainter  
       2018-12-27 13:28:11 +08:00
    lugit
    HackerPainter
        31
    HackerPainter  
       2018-12-27 13:29:07 +08:00
    512357301
        32
    512357301  
       2022-01-11 22:33:32 +08:00 via Android
    试试青龙面板,可以部署到本地的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   964 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 22:32 · PVG 06:32 · LAX 14:32 · JFK 17:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.