首先先安装一下模块
下面我们简单的学习一下schedule模块
先简单的看个示例
import schedule def test(*args,**kwargs): print("hello world 1",datetime.datetime.now()) schedule.every(1).minute.do(test) while True: schedule.run_pending()
结果如下,我们可以看到,每隔一分钟执行了一次test这函数
然后我们在看下一个例子
import schedule import time def test1(*args,**kwargs): print("这是test1的函数") time.sleep(5) print("这是test1的函数",datetime.datetime.now()) def test2(*args,**kwargs): print("这是test2的函数") time.sleep(5) print("这是test2的函数",datetime.datetime.now()) schedule.every(10).seconds.do(test1) schedule.every(10).seconds.do(test2) while True: schedule.run_pending()
结果如下
这是test2的函数 这是test2的函数 2019-02-11 09:33:55.615493 这是test1的函数 这是test1的函数 2019-02-11 09:34:00.623102 这是test2的函数 这是test2的函数 2019-02-11 09:34:10.638319 这是test1的函数 这是test1的函数 2019-02-11 09:34:15.645928 这是test2的函数 这是test2的函数 2019-02-11 09:34:25.661146 这是test1的函数 这是test1的函数 2019-02-11 09:34:30.668755 这是test2的函数 这是test2的函数 2019-02-11 09:34:40.683972 这是test1的函数 这是test1的函数 2019-02-11 09:34:45.691581 这是test2的函数 这是test2的函数 2019-02-11 09:34:55.706799 这是test1的函数 这是test1的函数 2019-02-11 09:35:00.714407 这是test2的函数 这是test2的函数 2019-02-11 09:35:10.729625 这是test1的函数 这是test1的函数 2019-02-11 09:35:15.737234 这是test2的函数 这是test2的函数 2019-02-11 09:35:25.752451 这是test1的函数 这是test1的函数 2019-02-11 09:35:30.760060 这是test2的函数 这是test2的函数 2019-02-11 09:35:40.775278 这是test1的函数
从结果我们可以很清晰的看到,执行test1和test2两个函数,不是每隔10s执行一次,而是每隔15s执行一次,所以我们可以理解,schedule模块如果去同时执行多个函数的话,这些不同的函数不是开启多线程并行执行的,而是串行执行的,为了解决这个问题,我们可以用到python的多线程模块来解决这个问题
下面我们就通过多线程模块来解决这个问题
import schedule import threading import time def test1(*args,**kwargs): print("这是test1的函数") time.sleep(5) print("这是test1的函数",datetime.datetime.now()) def test2(*args,**kwargs): print("这是test2的函数") time.sleep(5) print("这是test2的函数",datetime.datetime.now()) def sch_test1(): threading.Thread(target=test1).start() def sch_test2(): threading.Thread(target=test2).start() schedule.every(10).seconds.do(sch_test1) schedule.every(10).seconds.do(sch_test2) while True: schedule.run_pending()
结果如下
这是test1的函数 这是test2的函数 这是test2的函数 2019-02-11 09:42:03.022749 这是test1的函数 2019-02-11 09:42:03.022749 这是test2的函数 这是test1的函数 这是test2的函数 2019-02-11 09:42:13.037967 这是test1的函数 2019-02-11 09:42:13.053567 这是test1的函数 这是test2的函数 这是test2的函数 2019-02-11 09:42:23.053184 这是test1的函数 2019-02-11 09:42:23.068784 这是test1的函数 这是test2的函数 这是test2的函数 2019-02-11 09:42:33.068402 这是test1的函数 2019-02-11 09:42:33.068402 这是test1的函数 这是test2的函数 这是test1的函数 2019-02-11 09:42:43.083620 这是test2的函数 2019-02-11 09:42:43.083620 这是test2的函数 这是test1的函数 这是test2的函数 2019-02-11 09:42:53.098837 这是test1的函数 2019-02-11 09:42:53.114437 这是test2的函数 这是test1的函数 这是test1的函数 2019-02-11 09:43:03.114055 这是test2的函数 2019-02-11 09:43:03.114055 这是test1的函数 这是test2的函数 这是test2的函数 2019-02-11 09:43:13.129272 这是test1的函数 2019-02-11 09:43:13.160472 这是test1的函数 这是test2的函数 这是test1的函数 2019-02-11 09:43:23.144490 这是test2的函数 2019-02-11 09:43:23.144490
从上面的结果我们可以看到,2个函数之间没有干扰了,每隔10s后分别执行了2个函数