0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

pythonのレスポンス指標ー関数時間測定編

Posted at

この記事では.

データ分析でのレスポンス測定は以下の記事通り 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の関数を測定する関数を作成および利用方法までをまとめた。
デコレーターを利用することで、処理とレスポンス測定が独立(干渉しない)で実装できた。
今後やるとしたらクラス化。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?