zoukankan      html  css  js  c++  java
  • python的定时任务模块--schedule

    首先先安装一下模块

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

  • 相关阅读:
    CentOS6.9下ssh密钥登录配置步骤(免密码登录)和ssh-keygen 命令常用参数
    Debian9.5下ssh密钥登录配置步骤(免密码登录)和ssh-keygen 命令常用参数
    CentOS6.9下sftp配置和scp用法
    Debian9.5下sftp配置和scp用法
    SSH概述与配置文件说明
    Linux下的权限掩码umask
    gcc 高版本兼容低版本 技巧 :指定 -specs={自定义specs文件} 参数。可以搞定oracle安装问题
    apt 之 最强技能:【欺骗】,文雅点【偷梁换柱】!
    续:纠正:ubuntu 【6.04 LTS】可以安装安装 ! for《Oracle-10.2.0.1,打补丁10.2.0.5:在 debian 版本4【不含4】以上,及 ubuntu 7.04【不含7.04】以上都可以安装!》
    ubuntu 4.10~5.10 :古老的ubuntu上安装oracle10g的情况
  • 原文地址:https://www.cnblogs.com/bainianminguo/p/10325169.html
Copyright © 2011-2022 走看看