• python定时执行方法


    1  time.sleep

    import time

    for i in range(5):

      print(i)

      time.sleep(10)

    2 用shed

    复制代码
    import time  
    import sched  
      
    schedule = sched.scheduler ( time.time, time.sleep )  
      
    def func(string1,float1):  
        print("now is",time.time()," | output=",string1,float1)
      
    print(time.time())
    schedule.enter(2,0,func,("test1",time.time()))  
    schedule.enter(2,0,func,("test1",time.time()))  
    schedule.enter(3,0,func,("test1",time.time()))  
    schedule.enter(4,0,func,("test1",time.time()))  
    schedule.run()  
    print(time.time())
    复制代码

    其中func中放要执行的函数,用schedule.enter加入要执行的函数,里面的第一个参数是延迟执行的时间,用sched.scheduler进行初始化

    复制代码
    1512033155.9311035
    now is 1512033157.9316308  | output= test1 1512033155.9311035
    now is 1512033157.9316308  | output= test1 1512033155.9311035
    now is 1512033158.9322016  | output= test1 1512033155.9311035
    now is 1512033159.9316351  | output= test1 1512033155.9311035
    1512033159.9316351
    [Finished in 4.2s]
    复制代码

    上面是执行结果,缺点是任务队列是阻塞型,即schedule里的任务不执行完,后面的主线程就不会执行

    3  用threading里的timer,实现非阻塞型,即主线程要任务同时执行

    复制代码
    import time  
    from threading import Timer  
      
    def print_time( enter_time ):  
        print "now is", time.time() , "enter_the_box_time is", enter_time  
      
      
    print time.time()  
    Timer(5,  print_time, ( time.time(), )).start()  
    Timer(10, print_time, ( time.time(), )).start()  
    print time.time()  
    复制代码

    执行结果:

    1512034286.9443169
    1512034286.9452875
    now is 1512034291.9460146 enter_the_box_time is 1512034286.9443169
    now is 1512034296.9461012 enter_the_box_time is 1512034286.9452875
    [Finished in 10.2s]

    可看出任务和主线程是同步执行,但是后3位又稍有不同,应该是python的多线程并非真正的多线程导致

    每天某个时间定时执行任务:

    复制代码
    import datetime
    import time
    
    def doSth():
        print('test')
        # 假装做这件事情需要一分钟
        time.sleep(60)
    
    def main(h=0, m=0):
        '''h表示设定的小时,m为设定的分钟'''
        while True:
            # 判断是否达到设定时间,例如0:00
            while True:
                now = datetime.datetime.now()
                # 到达设定时间,结束内循环
                if now.hour==h and now.minute==m:
                    break
                # 不到时间就等20秒之后再次检测
                time.sleep(20)
            # 做正事,一天做一次
            doSth()
    
    main()
    复制代码

     4  linux用 crontab

  • 相关阅读:
    Text Link Ads 注册[赚钱一]
    Linux文件系统中的链接
    C++虚函数和纯虚函数(1)
    Android init reading tips
    Android上GDB的使用
    What is prelink?
    Linux fork哪些被继承,哪些不被继承
    为什么x86 Linux程序起始地址是从0x08048000开始的?
    Android应用开发的插件化 模块化
    C++拷贝构造函数(深拷贝、浅拷贝)
  • 原文地址:https://www.cnblogs.com/adjk/p/8533114.html
Copyright © 2020-2023  润新知