1. ホーム
  2. パイソン

[解決済み】Pythonsのtimeitでパフォーマンスをテストするためにコードセグメントを時間指定するにはどうすればよいですか?

2022-04-17 16:26:03

質問

Pythonスクリプトがあり、その通りに動作するのですが、実行時間を書き込む必要があります。ググってみると timeit が、なかなかうまくいきません。

私のPythonスクリプトは次のようなものです。

import sys
import getopt
import timeit
import random
import os
import re
import ibm_db
import time
from string import maketrans
myfile = open("results_update.txt", "a")

for r in range(100):
    rannumber = random.randint(0, 100)

    update = "update TABLE set val = %i where MyCount >= '2010' and MyCount < '2012' and number = '250'" % rannumber
    #print rannumber

    conn = ibm_db.pconnect("dsn=myDB","usrname","secretPWD")

for r in range(5):
    print "Run %s\n" % r        
    ibm_db.execute(query_stmt)
 query_stmt = ibm_db.prepare(conn, update)

myfile.close()
ibm_db.close(conn)

必要なのは、クエリの実行とファイルへの書き込みにかかる時間です。 results_update.txt . 目的は、異なるインデックスとチューニング機構を持つ私のデータベースの更新ステートメントをテストすることです。

どのように解決するのですか?

を使用することができます。 time.time() または time.clock() タイミングを合わせたいブロックの前後で

import time

t0 = time.time()
code_block
t1 = time.time()

total = t1-t0

この方法は timeit (複数の実行を平均化しない) が、簡単な方法である。

time.time() (WindowsとLinuxの場合)と time.clock() (Linuxの場合)は高速な関数に対して十分な精度を持ちません(total = 0となります)。このような場合、あるいは複数の実行による経過時間を平均化したい場合は、手動で関数を複数回呼び出す必要があります(このサンプルコードではすでに実行されていると思いますし、timeitがその 引数)

import time

def myfast():
   code

n = 10000
t0 = time.time()
for i in range(n): myfast()
t1 = time.time()

total_n = t1-t0

Windowsの場合、Coreyさんのコメントにあるように time.clock() ははるかに高い精度(秒ではなくマイクロ秒)であるため、より優先されます。 time.time() .