python schedule妯″潡(schedule Python)

如果希望定期执行Python脚本,最著名的选择应该是Crontab脚本,但Crontab有以下缺点:
1.执行二级任务不方便。2.当有数百个调度任务要执行时,Crontab的管理会特别不方便。另一个选择是芹菜,但是芹菜的配置比较麻烦。如果你只是需要一个轻量级的调度工具,芹菜不会是一个好的选择。如果你想使用一个轻量级的任务调度工具,想让它尽可能简单易用,不依赖外部,最好能容纳Crontab的所有基本功能,那么调度模块就是你最好的选择。用它安排任务可能只需要几行代码,感受一下:# Python实用书籍导入日程导入时间Def job () :print(‘我在工作.’)schedule.every (10)。minutes . do(job)while true 3360 schedule . run _ pending()time . sleep(1)上面的代码表示每隔10分钟你只需要通过调用scedule.every(小时数)引入调度模块,发布周期性任务。时间类型。做(工作)。发布后的周期性任务需要使用run_pending函数来检查是否执行,所以需要While循环来持续轮询这个函数。具体来说,时间表模块的安装、主要用途和高级用途如下所述。
准备
在开始之前,您应该确保Python和pip已经成功安装在您的计算机上。如果没有,可以访问这篇文章:超详细的Python安装指南进行安装。(可选1)如果使用Python进行数据分析,可以直接安装Anaconda:Python数据分析和挖掘的好帮手——Anaconda,内置了Python和pip。(可选2)另外推荐你使用VSCode editor,它有很多优点:Python编程的最佳伙伴——VS代码详细指南。请选择以下方式之一来输入命令安装依赖关系:1。Windows环境打开Cmd(开始-运行-CMD)。2.在Mac OS环境下打开终端(进入终端(命令空间)。3.如果使用的是VSCode Editor或者Pycharm,可以直接使用界面底部的Terminal.pip安装时间表。
2.基本用途
最基本的用法在文章开头已经提到了,下面再举几个调度任务的例子:# Python实用宝典导入日程导入时间def job () :print(‘我在工作.’)#执行任务schedule.every (10)。minutes . do(job)# schedule . every()hour . do(job)# 10:30每日日程。每()。day.at (‘10336030 ‘)。do (job) #月度计划表。每()。Monday.do (job)。执行任务schedule.every()。星期三,在(‘ 1:15 ‘)。Do (job) #执行任务schedule.every()。分钟(‘ 336017 ‘)。每分钟17秒做(工作)。而true : schedule . run _ pending()time . sleep(1)可以看到上面的例子涵盖了从月到秒的配置。但如果想只运行一次任务,可以这样匹配:# Python实用书导入时间表导入时间Def Job _ That _ Executes _ Once(): #这里写的任务只会执行一次.return schedule . cancel jobschedule . every()。day.at (‘22336030 ‘)。do (job _ that _ executes _ once)而true : schedule . run _ pending()time . sleep(1)参数传递如果你有参数要传递给要执行的作业,你要做的就是这样:# Python实用书籍导入Scheduled EF Greet(name): print(‘ hello ‘,name) # do()将多余的参数传递给作业函数schedule.every (2)。seconds.do (greet,Name=’ Alice ‘)schedule . every(4). seconds . do(greet,Name=’Bob ‘)获取所有当前作业。如果想获得当前所有的工作:# Python实用书籍导入预定EF Hello(): print(‘ Hello World ‘)Schedule。每()。second . do(hello)All _ jobs=schedule . get _ jobs()取消所有作业。如果触发了某种机制,你需要立即清除当前程序中的所有作业:# Python实用书导入预定EF Greet(name): print(‘ hello { } ‘)。格式(名称))schedule.every()。second.do (greet) schedule.clear()标签函数。设置作业时,可以对其进行标记,以便以后管理。# Python实用收藏导入预定EF Greet(name): print(‘ hello { } ‘)。格式(名称))#。标记标记schedule.every()。day.do(问候,‘安德里亚’)。标记(‘每日任务’,’朋友’)schedule . every()hour . do(问候,’ John ‘)。标记(‘每小时任务’,’朋友’)schedule . every()hour . do(问候,’ Monica ‘)。标记(‘每小时任务’,’客户’)schedule . every()day . do(greet,’ Derek ‘)。tag(‘daily-tasks ‘,Guest’)# get_jobs (tag):可以用这个标签获取所有任务friends=schedule . get _ jobs(‘ friend ‘)#取消所有用daily-tasks标签的任务schedule.clear(‘daily-tasks ‘)设置作业的截止日期。如果需要让某个作业在某个时间过期,可以使用这个方法:# Python实用集合导入Schedule from Datetime导入Datetime,Time Delta,Time Def Job () :print (‘boo’) #每小时运行一次作业,18336030之后,停止schedule.every (1)。hours.until (‘18336030 ‘)。do (job) #每小时运行一次作业,030-01-01 18336033 today schedule . every(1)。小时。直到(‘ 2030-01-01 18336033 ‘)。do (job) #每小时运行一次作业,停止schedule.every (1)。hours.until(时间增量(小时=8))。Do (job) #每小时运行一次作业,并停止schedule.every (1)。小时。直到11336032336042(时间(11,33,42)之后。do (job) #每小时运行一次作业,并停止计划。每(1)。几个小时。直到(datetime (2020,5,17,11,36,20))。做(。立即运行所有作业,不管它们的计划如何。如果触发了某个机制,需要立即运行所有作业,可以调用schedule.run_all() :# Python实用宝导入预定ef job _ 1()3360 print(‘ foo ‘)def job _ 2()3360 print(‘ bar ‘)schedule . every()。周一到(‘ 12336040 ‘)。Do (job _ 1)计划。每()。星期二. at (‘16336040 ‘)。Do (job _ 2)计划。Run _ all () #一次运行所有作业,每个作业之间有10秒的调度间隔。
3.高级用途
装饰器安排作业如果你觉得设定作业这种形式太啰嗦了,也可以使用装饰器模式:# Python实用宝典从计划导入每隔,重复,运行_挂起导入时间#此装饰器效果等同于时间表。每(10)个。分钟。每隔10分钟重复一次.分钟)def job():print(‘我是计划的作业)而true : run _ pending()时间。睡眠(1)并行执行默认情况下,计划按顺序执行所有作业。其背后的原因是,很难找到让每个人都高兴的并行执行模型。不过你可以通过多线程的形式来运行每个作业以解决此限制:# Python实用宝典导入线程导入时间导入计划def job1():print(‘我正在线程% s ‘ %线程。current _ thread())def job 2(): print(‘我正在线程% s ‘ %线程。current _ thread())def job 3(): print(‘我正在线程% s ‘ %线程。current _ thread())def run _ threaded(job _ func)3360 job _ thread=线程化.线程(target=job _ func)作业线程。开始()计划。每(10)个。秒。do(运行线程,作业1)调度。每(10)个。秒。do(run _ threaded,job 2)调度。每(10)个。秒。do(run _ threaded,job 3)while true 3360调度。运行挂起()时间。睡眠(1)日志记录安排模块同时也支持记录日志记录,这么使用:# Python实用宝典导入计划导入日志记录日志记录。基本配置()schedule _ logger=日志记录。获取记录器(‘ schedule ‘)#日志级别为调试调度记录器。设置级别(级别=记录.DEBUG)def job():打印(‘ Hello,Logs ‘)计划。每()秒。做(工作)时间表。run _ all()调度。清除()效果如下:调试:调度:运行*全部* 1作业,两者之间有0秒延迟debug : schedule :运行作业Job(interval=1,unit=seconds,do=job,args=(),kwargs={})您好,日志错误:计划:删除删除*全部*作业异常处理安排不会自动捕捉异常,它遇到异常会直接抛出,这会导致一个严重的问题:后续所有的作业都会被中断执行,因此我们需要捕捉到这些异常。你可以手动捕捉,但是某些你预料不到的情况需要程序进行自动捕获,加一个装饰器就能做到了:# Python实用宝典导入func工具def catch _ exceptions(cancel _ on _ failure=False): def catch _ exceptions _ decorator(job _ func): @ func工具。wrap PS(job _ func)def wrapper(* args,* * kwargs)3360 try 3360 return job _ func(* args,* * kwargs)除3360 import trace back print(trace back。format _ exc())if cancel _ on _ failure 3360返回调度取消作业返回包装器返回catch _ exceptions _ decorator @ catch _ exceptions(cancel _ on _ failure=True)def bad _ task():返回1/0调度。每隔(5)。分钟。do(坏任务)这样,坏任务在执行时遇到的任何错误,都会被捕捉异常捕获,这点在保证调度任务正常运转的时候非常关键。我们的文章到此就结束啦,如果你喜欢今天的计算机编程语言实战教程,请持续关注我们!

其他教程

会声会影如何给每张照片加入动画(会声会影抠动态人物)

2022-8-25 16:11:00

其他教程

会声会影配音教程(会声会影视频加音乐教程)

2022-8-25 16:12:00

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索