Python 执行定时任务(cron)有什么好用的框架吗 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
mrchi
V2EX    程序员

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

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

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

  • 定时请求某些内容是否更新了,发送通知给我,比如” 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
Oneneuuu
    5
Oneneuuu  
   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
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     Solana     5262 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 35ms UTC 08:08 PVG 16:08 LAX 00:08 JFK 03:08
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86