python定时任务
1.time.sleep(n) 循环执行,使用sleep阻塞n秒,缺点是sleep是个阻塞函数,会阻塞进程。import datetimeimport timedef dosomething(): while True: print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) time.sleep(10)dosomething()print('end')
运行结果:
2.Timer(n, func)
使用threading的Timer实现定时任务,Timer是非阻塞的。import datetimefrom threading import Timerdef dosomething(): print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) Timer(10, dosomething).start()dosomething()print('end')
运行结果:
3.sched调度器
shced模块是标准库定义的,它是一个调度器(延时处理禁止),将任务事件加入调度队列,调度器就会顺序执行import datetimeimport timeimport scheddef dosomething(): print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) schedule.enter(10, 1, dosomething, ())# 生成调度器(两个参数比较复杂,暂不考虑含义)schedule = sched.scheduler(time.time, time.sleep)# 加入调度事件(间隔10秒执行,多个事件同时到达时优先级,触发的函数,函数参数)schedule.enter(10, 1, dosomething, ())# 运行schedule.run()print('end')
运行结果:
4.定时框架APScheduler(Advanced Python Scheduler)
APScheduler是一个第三方库,使用很方便,支持间隔时间执行,固定时间执行,某个日期执行一次三种类型。import datetimefrom apscheduler.schedulers.blocking import BlockingSchedulerdef dosomething(): print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))scheduler = BlockingScheduler()scheduler.add_job(dosomething, 'interval', seconds=10)scheduler.start()print('end')
运行结果:
5.windows定时任务
可以使用pyinstaller将python程序打包成exe文件,然后添加到windows的定时任务。6.Linux定时任务
可以使用Crontab定时运行python脚本。