先写三个脚本:
test1.py:
# -*- coding: utf-8 -*-
def main_job1():
print('This job is run every 20 seconds.')
test2.py:
# -*- coding: utf-8 -*-
def main_job2():
print('This job is run every 1 minutes.')
test3.py:
# -*- coding: utf-8 -*-
def helloworld():
print('hello world!')
现在我需要按指定的时间去执行上面这些脚本,如间隔3s执行test1.py ,间隔1分钟执行test2.py,类型这种定时任务,我们可以教给linux 自带的crontab去完成,但显得不是那么专业,python 有自己强大的调度框架,也能完成这件事。
- APScheduler是一个Python定时任务框架,使用起来十分方便。提供了基于日期、固定时间间隔以及crontab类型的任务,并且可以持久化任务
- APScheduler是基于Quartz(java实现的一个开源作业调度框架)的一个Python定时任务框架,实现了Quartz的所有功能,使用起来十分方便
# -*- coding: utf-8 -*-
# python调度模块
from apscheduler.schedulers.blocking import BlockingScheduler
sched = BlockingScheduler()
# 导入要调度的脚本执行主函数
from test1 import main_job1
from test2 import main_job2
from test3 import helloworld
# 间隔3秒钟执行一次
sched.add_job(main_job1,'interval', seconds=3)
# 间隔1分钟执行一次
sched.add_job(main_job2,'interval', minutes=1)
#在指定的时间,只执行一次
sched.add_job(helloworld, 'date', run_date='2018-11-09 11:20:00')
# # 采用cron的方式执行
sched.add_job(helloworld, 'cron', day_of_week='4', second='*/4')
# 上面是通过add_job()来添加作业,另外还有一种方式是通过scheduled_job()修饰器来修饰函数。
@sched.scheduled_job('interval', seconds=3)
def timed_job():
print('我爱你中国!')
print('before the start funciton')
#这里的调度任务是独立的一个线程
while True:
sched.start()
运行效果:
before the start funciton
hello world!
This job is run every 3 seconds.
我爱你中国!
This job is run every 3 seconds.
我爱你中国!
hello world!
This job is run every 3 seconds.
我爱你中国!
hello world!
This job is run every 3 seconds.
我爱你中国!
hello world!
This job is run every 3 seconds.
我爱你中国!
This job is run every 3 seconds.
我爱你中国!
hello world!
This job is run every 3 seconds.
我爱你中国!
hello world!
This job is run every 3 seconds.
我爱你中国!
hello world!
hello world!
This job is run every 3 seconds.
我爱你中国!