Не могу использовать объект данных с модулем timeit.Time в Python - PullRequest
1 голос
/ 11 ноября 2009

Я пытаюсь измерить, сколько времени занимает чтение и шифрование некоторых данных (независимо). Но я не могу получить доступ к предварительно созданному объекту данных в течение времени (так как он работает в собственной виртуальной среде)

Это прекрасно работает (операция чтения файла синхронизации):

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

Нижеследующее не работает, потому что я не могу получить доступ к объекту 'fileData'. Я не могу создать его снова изнутри функции 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)

Ответы [ 2 ]

1 голос
/ 11 ноября 2009

timeit принимает аргумент настройки, который запускается только один раз

из документов:

setup: оператор, который будет выполнен один раз изначально (по умолчанию '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()
0 голосов
/ 11 ноября 2009

вы можете использовать параметр 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 запускается только один раз.

...