最近、プログラムを実行する場合、プログラムの実行時間を数回カウントして最適化する必要があります。考えるのは比較的簡単ですが、時間統計の波があるたびに、何度もそれを書く必要はありません。当然、私は非常にPythonicなデコレータを使用することを考えています。未満。
import time
def timer(func):
def call_func(*args, **kwargs):
print("计时开始")
start_time = time.time()
func(*args, **kwargs)
end_time = time.time()
total_time = end_time - start_time
print("计时结束")
print(f"程序用时{int(total_time // 60)}分{total_time % 60:.2f}秒")
return call_func
if __name__ == '__main__':
@timer
def test(second): # 测试函数
time.sleep(second)
test(3.4)
以下は実行結果です。
最初に一般的なデコレータを実装し、func関数の前後に組み込みの時間モジュールを使用してタイミング統計を実装し、python 3.6で導入された新機能f文字列を使用します(超推奨、高速、直感的) 、およびsimple)。結果を出力します。
特定のプログラムまたはコードブロック(上記のテスト関数など)の実行時間をカウントする必要がある場合は、先ほど作成した@timerデコレータをテスト関数に追加します。
もちろん、このモジュールを再利用する必要があります。現時点では、このmytimer.py(上記のコードブロックの名前、他の任意の名前を選択できます)をプロジェクトにコピーし、モジュールをインポートして使用するだけです。タイミングを使用する必要がある場合デコレータで十分です。実装の例を次に示します。
# 导入计时器装饰器
from mytimer import timer
@timer # 给函数加装饰器
def spark_demo(usetime):
"""
假设我们要统计运行spark中spark_demo的总时长
"""
import time
time.sleep(usetime)
pass
if __name__ == '__main__':
spark_demo(74.4)
操作結果:
タイマーを使用する必要がある場所に@timerを追加する必要がある限り、それは簡単で快適です!これが、pythonerの髪のボリュームが非常に多い理由です!!!