首先先安装一下模块

 

下面我们简单的学习一下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个函数

 

posted on 2019-01-26 22:34  bainianminguo  阅读(703)  评论(0编辑  收藏  举报