Временной блок кода в Python, не ставя его в функцию
Я хотел бы выделить блок кода, не помещая его в отдельную функцию. например:
def myfunc:
# some code here
t1 = time.time()
# block of code to time here
t2 = time.time()
print "Code took %s seconds." %(str(t2-t1))
однако, я хотел бы сделать это с помощью модуля timeit более чистым способом, но я не хочу делать отдельную функцию для блока кода.
спасибо.
Ответы
Ответ 1
Вы можете сделать это с помощью оператора with
. Например:
import time
from contextlib import contextmanager
@contextmanager
def measureTime(title):
t1 = time.clock()
yield
t2 = time.clock()
print '%s: %0.2f seconds elapsed' % (title, t2-t1)
Используется следующим образом:
def myFunc():
#...
with measureTime('myFunc'):
#block of code to time here
#...
Ответ 2
Вы можете настроить переменную, чтобы ссылаться на блок кода, который вы хотите использовать, добавив этот блок в тройные кавычки Python. Затем используйте эту переменную при создании экземпляра объекта timeit. Несколько после примера из Python timeit docs, я придумал следующее:
import timeit
code_block = """\
total = 0
for cnt in range(0, 1000):
total += cnt
print total
"""
tmr = timeit.Timer(stmt=code_block)
print tmr.timeit(number=1)
Что для меня напечатано:
499500
0,000341892242432
(Где 499500 - выход блока с таймером, а 0.000341892242432 - время работы.)
Ответ 3
В соответствии с Skilldrick answer есть глупый модуль, который, я думаю, может помочь: BlockLogginInator.
import time
from blocklogginginator import logblock # logblock is the alias
with logblock(name='one second'):
""""
Our code block.
"""
time.sleep(1)
>>> Block "one second" started
>>> Block "one second" ended (1.001)