Python APScheduler
import time, threading, sched, datetime from threading import Timer from apscheduler.schedulers.background import BackgroundScheduler from apscheduler.schedulers.blocking import BlockingScheduler # bootstart + flask scheduler def main(): #timeTask() #timerTask() #testSched() testAPScheduler() def timeTask(): while True: task() time.sleep(5) #Python 标准库 threading 中有个 Timer 类。它会新启动一个线程来执行定时任务(只执行一次), 它是非阻塞函式。 def timerTask(): ''' 第一个参数: 延迟多长时间执行任务(单位: 秒) 第二个参数: 要执行的任务, 即函数 第三个参数: 调用函数的参数(tuple) ''' Timer(5, task, ()).start() # 使用标准库中sched模块。sched 是事件调度器,它通过 scheduler 类来调度事件,从而达到定时执行任务的效果。 # 还是在主线程里面跑 def testSched(): # 初始化 sched 模块的 scheduler 类 scheduler = sched.scheduler(time.time, time.sleep) # 增加调度任务 # 该函数可以延迟一定时间执行任务。delay 表示延迟多长时间执行任务,单位是秒。priority为优先级,越小优先级越大。 # 两个任务指定相同的延迟时间,优先级大的任务会向被执行。action 即需要执行的函数,argument 和 kwargs 分别是函数的位置和关键字参数。 # enter(delay, priority, action, argument=(), kwargs={}) scheduler.enter(5, 1, task) # 运行任务 scheduler.run() # pip install APScheduler # 上面三种办法能实现定时任务,但是都无法做到循环执行定时任务。因此,需要一个能够担当此重任的库。它就是APScheduler。 # 如果主线程退出了 那么该线程也会自动退出 def testAPScheduler(): # APScheduler中有很多种不同类型的调度器,BlockingScheduler与BackgroundScheduler是其中最常用的两种调度器。 # 区别主要在于BlockingScheduler会阻塞主线程的运行,而BackgroundScheduler不会阻塞。 # 创建后台执行的 schedulers #scheduler = BlockingScheduler() scheduler = BackgroundScheduler() # 添加调度任务 # 调度方法为 timedTask,触发器选择 interval(间隔性),间隔时长为 2 秒 #scheduler.add_job(task, 'interval', seconds = 5) #重复执行时,间隔时间必须大于job执行时间 now = datetime.datetime.now() future = now + datetime.timedelta(seconds = 5) scheduler.add_job(task1, 'date', run_date=future, args=['text1']) scheduler.add_job(task1, 'date', run_date=future, args=['text2']) scheduler.add_job(task1, 'date', run_date=future, args=['text3']) # 启动调度任务 scheduler.start() def task(): curThread = threading.currentThread() print(curThread.name, curThread.ident) print(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")) time.sleep(20) def task1(text): print("text:" + text) curThread = threading.currentThread() print(curThread.name, curThread.ident) print(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")) time.sleep(10) print(text, "------") if __name__ == '__main__': curThread = threading.currentThread() print(curThread.name, curThread.ident) main() time.sleep(20) print("---end----")
MainThread 13388
text:text2
ThreadPoolExecutor-0_0 9792
2019-02-01 20:09:47
text:text1
ThreadPoolExecutor-0_1 536
2019-02-01 20:09:47
text:text3
ThreadPoolExecutor-0_2 4392
2019-02-01 20:09:47
text2 ------
text1 ------
text3 ------
---end----

浙公网安备 33010602011771号