Точная синхронизация функций в Python

Я написал сообщение в блоге об этом, посмотрите его:

http://www.nimrodstech.com/scala-map-merge/

в основном используя полугруппу скалазов, вы можете достичь этого довольно легко

будет выглядеть примерно так:

  import scalaz.Scalaz._
  Map1 |+| Map2

62
задан Prashant Kumar 10 November 2013 в 15:11
поделиться

3 ответа

Вместо написания собственного кода профилирования я предлагаю вам проверить встроенные профилировщики Python ( profile или cProfile , в зависимости от ваших потребностей. ): http://docs.python.org/library/profile.html

37
ответ дан 24 November 2019 в 16:34
поделиться

Используйте модуль timeit из стандарта Python библиотека.

Основное использование:

from timeit import Timer

# first argument is the code to be run, the second "setup" argument is only run once,
# and it not included in the execution time.
t = Timer("""x.index(123)""", setup="""x = range(1000)""")

print t.timeit() # prints float, for example 5.8254
# ..or..
print t.timeit(1000) # repeat 1000 times instead of the default 1million
69
ответ дан 24 November 2019 в 16:34
поделиться

Этот код очень неточен

total= 0
for i in range(1000):
    start= time.clock()
    function()
    end= time.clock()
    total += end-start
time= total/1000

Этот код менее неточен

start= time.clock()
for i in range(1000):
    function()
end= time.clock()
time= (end-start)/1000

Очень неточный код страдает смещением измерения, если время выполнения функции близко к точности часов. Большинство измеренных значений времени представляют собой просто случайные числа от 0 до нескольких тактов часов.

В зависимости от рабочей нагрузки вашей системы, «время», которое вы наблюдаете из одной функции, может быть полностью артефактом планирования ОС и других неконтролируемых накладных расходов.

Вторая версия (менее неточная) имеет меньшую погрешность измерения. Если ваша функция действительно быстрая, вам может потребоваться запустить ее 10 000 раз, чтобы сгладить планирование ОС и другие накладные расходы.

И то, и другое, конечно, сильно вводит в заблуждение. Время выполнения вашей программы - в целом - не является суммой времени выполнения функции. Вы можете использовать числа только для относительных сравнений. Это не абсолютные измерения, которые несут много смысла.

23
ответ дан 24 November 2019 в 16:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: