Python実装関数タイマ

10356 ワード

python実装関数タイマには、次の2つの方法があります.
  • デコレーションを用いる
  • を実現する.
  • コンテキスト管理による
  • を実現する.
    装飾実装:
    #     
    from functools import wraps
    from datetime import datetime
    from time import sleep
    
    
    def timer(func):
        @wraps(func)
        def inner(*args, **kwargs):
            start_time = datetime.now()
            print("start time is {}".format(datetime.now()))
            result = func(*args, **kwargs)
            end_time = datetime.now()
            print("end time is {}".format(datetime.now()))
            print("     :{}".format(end_time - start_time))
            return result
    
        return inner
    
    
    @timer
    def run():  #timer(run)
        print("    :")
        sleep(5)
        print("    ")
    
    
    if __name__ == '__main__':
        run()
    
    #     
    start time is 2020-05-19 09:02:37.669742
        :
        
    end time is 2020-05-19 09:02:42.6730550:00:05.003327
    

    コンテキスト管理の実装
    #     
    class timer(object):
        def __enter__(self):
            self.t0 = datetime.now()
            print("start time is {}".format(datetime.now()))
    
        def __exit__(self, exc_type, exc_val, exc_tb):
            print("end time is {}".format(datetime.now()))
            print("     :{}".format(datetime.now() - self.t0))
    
    def run():
        print("    ")
        sleep(5)
        print("    ")
    
    if __name__ == '__main__':
        with timer() as t:
            run()
    
    #     
    start time is 2020-05-19 09:01:44.077509
        
        
    end time is 2020-05-19 09:01:50.0860830:00:06.008637
    

    まとめ:
  • は装飾器を用いて計時し、使いやすく、関数ヘッドに装飾器を導入すればよく、ある関数体に対して計時するしかない.
  • コンテキスト管理を使用してタイミングを計るのは、操作上面倒ですが、1つのコードブロックに対してタイミングを計ることができます.