python多个定时任务,python 任务 调度 管理

  python多个定时任务,python 任务 调度 管理

  照片来自Unsplash

  在项目中,我们可能会遇到预定任务的需要。第一,定期执行任务。比如每天早上8点定时推送晨报。第二,每隔一个时间段执行任务。比如,提醒自己每隔一个小时起来走走,避免久坐。今天给大家分享一下Python调度任务的实现方法。

  1

  第一种方法最简单,也最暴力。那就是在无限循环中使用线程睡眠函数sleep()。

  Datetime导入Datetime导入时间每10秒打印一次当前时间。 def timed task():while True:print(datetime . now()。strftime( % Y-% M-% d % H:% M:% S ))time . sleep(10)if _ _ name _ _= _ _ main _ _ :timed task()

  此方法可以按固定的时间间隔执行任务。如果在timedTask()函数之后有一些操作,我们也使用无限循环来阻塞线程。这会导致timedTask()一直占用CPU资源,导致后续操作失败。我建议重复使用。

  2

  既然第一种方法比较暴力,有没有更优雅的方法?答案是肯定的。Python标准库threading 中有Timer 个类。它会启动一个新线程来执行一个预定的任务,所以它是一个非阻塞函数。

  如果您使用多线程,您需要关注线程安全。那么你可以选择使用threading.Timer模块。

  从日期时间导入日期时间从线程导入计时器导入时间每10秒打印一次当前时间。def timedTask(): 第一个参数:延迟任务执行多长时间(单位:秒)第二个参数:要执行的任务,也就是函数的第三个参数:调用函数的参数(tuple) timer (10,Task,()。start()#定时任务定义task (): print (datetime.now()。strftime( % y-% m-% d % h:% m:% s ))if _ _ name _= _ _ main _ _ :定时任务

  运行结果:

  3

  第三种方法是使用标准库中的sched 模块。Sched是一个事件调度器,通过scheduler类调度事件,从而达到在固定时间执行任务的效果。

  sched 库用起来也很简单。

  1)首先,构造一个类sched.scheduler

  它接受两个参数:timefunc delayfunc。Timefunc应该返回一个表示当前时间的数字,delayfunc函数接受一个参数来暂停运行时间单位。

  一般使用默认参数即可,即传入这两个参数time.time 和time.sleep 。当然,你也可以自己实现时间暂停功能。

  2)添加计划任务

  scheduler 提供了两种添加计划任务的功能:

  enter(delay,priority,action,argument=(),kwargs={})

  该功能可以将任务的执行延迟一段时间。delay 表示任务延迟了多长时间,单位是秒。priority 为优先级,优先级越小,优先级越大。两个任务被分配相同的延迟时间,具有较高优先级的任务将被执行。action是要执行的函数,argument kwargs 分别是函数的位置和关键字参数。

  scheduler.enterabs(time,priority,action,argument=(),kwargs={})

  添加一个任务,但是这个任务会在010到59000执行。因此,时间是绝对时间。其他参数的用法与time一致。

  3)运行任务。

  调用enter()函数就大功告成了。

  下面是使用sche的一个简单示例:

  从日期时间导入日期时间导入计划导入时间每10秒打印一次当前时间。 def timed Task():# Initialize scheduler类sched.scheduler (time.time,time . sleep)# Add scheduler . enter(10,1,Task)# Run Task scheduler . Run()# Scheduled Task def Task():print(datetime . now()。strftime( % y-% m-% d % h:% m:% s ))if _ _ name _= _ _ main _ _ :

  值得注意的是,scheduler中的每个调度任务只会工作一次,不会被无限调用。如果要重复执行同一任务,需要重复添加计划任务。

  结束

  作者:风中的山

  微信官方账号:极客猴

  热爱读书,喜欢研究技术,梦想成为文艺青年的男孩。

  猴子

  微信官方账号分享干货

  scheduler.run()

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: