この記事では.
データ分析でのレスポンス測定は以下の記事通り timeit, time を利用します。
基本的にデータ加工などにかかる時間などワンライナーなコードを対して実行します。
https://qiita.com/binary2/items/6560a190b3fdb26cdaf9
%%timeit
df_test["date_dt"] = df_test.datetime.dt.strftime("%Y-%m-%d")
# 2.18 s ± 55.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
今年度からraspberrypiを利用した開発をすることになったので、分析以外でpythonを利用することになった。
また、システム開発ではないのでセンサーなどのやり取りもしないといけなく、分からないことだらけ orz...
まずは、何の処理に時間がかかっているのか?を把握する必要がある。
ある程度汎用的にレスポンス測定できるようにする。
開発なら最終的にクラスにするべきだが、
処理関数だけ作ってutilltyに打ち込んで開発しているので、、(おサボり)
今回は関数と利用方法のみをまとめる。
測定方法
レスポンス測定は、誰もがよくやる方法でOK!
import time
start = time.time() # 処理測定開始
# 処理関数
end = time.time() # 処理測定終了
print(str(end-start)) # 処理時間
実装
測定方法のコードを毎回測定したい処理に差し込めばOK!
だけど、当たり前だけど、汎用性が低すぎる orz..
↑を解消するために、レスポンス測定関数を作る。
実行関数は引数にして、関数名はprintで表示するようにする。
# レスポンス測定関数
def measure_response(f):
def func(*args, **kwargs):
print("start:" + f.__name__)
start = time.time()
result = f(*args, **kwargs)
end = time.time()
print("end:" + str(end-start))
return func
処理関数を作るときは、レスポンス測定関数をデコレートすればOK!
@measure_response
def func1():
sum_value = 0
for i in range(1000):
sum_value += i
return sum_value
func1()
# start:func1
# end:6.4849853515625e-05
まとめ
今回は、pythonの関数を測定する関数を作成および利用方法までをまとめた。
デコレーターを利用することで、処理とレスポンス測定が独立(干渉しない)で実装できた。
今後やるとしたらクラス化。