1

読み取りにかかる時間を測定してから、一部のデータを(独立して)暗号化しようとしています。しかし、timeit内に事前に作成されたデータオブジェクトにアクセスできないようです(独自の仮想環境で実行されるため)

これは正常に機能します(タイミングファイルの読み取り操作):

t = timeit.Timer("""
openFile = open('mytestfile.bmp', "rb")
fileData = openFile.readlines()    
openFile.close()""")
readResult = t.repeat(1,1)
print ("\Finished reading in file")

'fileData' objにアクセスできないため、以下は機能しません。timeit関数内から再度作成することはできません。そうしないと、全体の実行時間が長くなります。

タイミング暗号化操作:

tt = timeit.Timer("""
from Crypto.Cipher import AES
import os
newFile = []
key = os.urandom(32)
cipher = AES.new(key, AES.MODE_CFB)
for lines in fileData:
newFile = cipher.encrypt(lines)""")
encryptResult = tt.repeat(1,1)
4

2 に答える 2

1

timeitは、1回だけ実行されるセットアップ引数を取ります

ドキュメントから:

setup:最初に1回実行されるステートメント(デフォルトは「pass」)

例えば:

setup = """
from Crypto.Cipher import AES
import os
newFile = []
fileData = open('filename').read()
"""
stmt = """
key = os.urandom(32)
cipher = AES.new(key, AES.MODE_CFB)
for lines in fileData:
    newFile = cipher.encrypt(lines)"""

tt = timeit.Timer(stmt, setup)
tt.repeat()
于 2009-11-11T10:51:27.683 に答える
0

次のようsetupにクラスのパラメータを使用できます。timeit.Timer

tt = timeit.Timer("""
from Crypto.Cipher import AES
import os
newFile = []
key = os.urandom(32)
cipher = AES.new(key, AES.MODE_CFB)
for lines in fileData:
  newFile = cipher.encrypt(lines)""", 
setup = "fileData = open('mytestfile.bmp', 'rb').readlines()")
encryptResult = tt.repeat(1,1)

setupコードは1回だけ実行されます。

于 2009-11-11T10:59:00.950 に答える