开发者

Python不要再使用while死循环,定时器代替效果更佳

在python开发的过程中,经常见到小伙伴直接使用while True的死循环+sleep的方式来保存程序的一直运行。

这种方式虽然能达到效果,但是说不定什么时候就直接崩溃了。并且,在linux环境中在检测到while True的未知进程就会直接干掉。

面对这样的业务场景,通常可以选择使用定时器的方式来完成,况且用法也比较简单。

在python中的定时任务用法通常有sched模块/threading.QTimer模块,sched模块在之前的历史文章中有过详细说明。

今天介绍的这个定时模块是某位大佬写的APScheduler定时器框架,强烈推荐使用这种方式来完成定时任务的开发。

这里我们开发一个print_datetime函数来打印当前的时间,同时也将print_time函数作为我们需要一直保持执行的任务。

#Importingthedatetimemodule.
importdatetime


defprint_time(message=None):
"""
Itprintsthecurrenttime,optionallyprecededbyamessage.

www.devze.com:parammessage:Themessagetoprint
"""
print(message,datetime.datetime.now().strftime('%Y-%m-%d%H:%M:%S'))

然后,我们准备需要使用的定时任务模块apscheduler,可以选择pip的方式进行安装,我个人一直使用的是这样方式。

pipinstallapscheduler

#ImportingtheblockingSchedulerclassfromtheapscheduler.schedulers.blockingmodule.
fromapscheduler.schedulers.blockingimportBlockingScheduler

至此,我们便可以将需要保持一直处于执行状态的业务函数,也就是这里的print_datetime函数作为定时中的任务执行。

如此,我们就不用使用while True死循环+sleep的方式来使任务一直保存在运行形状了。

#Creatingaschedulerobject.
scheduler=BlockingScheduler()

#Addingajobtothescheduler.
scheduler.add_joisEDpKDb(func=print_time,args=('时间打印定时任务',),trigger='cron',second='*/1')#每秒执行

#Startingtheschedulerinaseparatethread.
scheduler.start()

最后,直接启动当前的.py文件就能直接执行定时任务了,运行效果如下。

时间打印定http://www.devze.com时任务 2023-02-26 13:52:52

时间打印定时任务 2023-02-26 13:52:53

时间打印定时任务 2023-02-26 13:52:54

时间打印定时任务 2023-02-26 13:52:55

时间打印定时任务 2023-02-26 13:52:56

时间打印定时任务 2023-02-26 13:52:57

当然,作为定时任务的框架apscheduler,他还有很多的技能。比如:按更复杂的周期执行,在有限的时间内执行,单点执行等等。

下面是我列出的比较常见的apscheduler定时任务的执行方式,供小伙伴们参考,提出宝贵意见。

scheduler.add_job(func=print_time,args=('任务只执行一次,在下一次的时间执行',),
next_run_time=datetime.datetime.now()+datetime.timedelta(seconds=60))

scheduler.add_jwww.devze.comob(func=print_time,args=('时间打印定时任务',),trigger='interval',seconds=5)#每5秒执行一次
scheduler.add_job(func=print_time,args=('时间打印定时任务',),trigger='interval',minutes=2)#每2分钟执行一次
scheduler.add_job(func=print_time,args=('时间打印定时任务',),trigger='interval',hours=1)#每1小时执行一次

scheduler.add_job(func=print_time,args=('时间打印定时任务',),trigger='cron',minute='*',second='1')#每分钟执行一次
scheduler.add_job(func=print_time,args=('时间打印定时任务',),trigger='cron',hour='*',minute='0',
se开发者_JAV培训cond='0')#每小时执行一次

scheduler.add_job(func=print_time,args=('时间打印定时任务',),trigger='cron',hour='20',minute='0',
second='0')#每天20:00执行一次
scheduler.add_job(func=print_time,args=('时间打印定时任务',),trigger='cron',hour='21')#每天21:00执行一次

在使用过程中,apscheduler模块是最简单的调度类定时任务,欢迎小伙伴留言讨论!

到此这篇关于Python不要再使用while死循环,定时器代替效果更佳的文章就介绍到这了,更多相关Python while死循环内容请搜索我们以前的文章或继续浏android览下面的相关文章希望大家以后多多支持我们!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新开发

开发排行榜