Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 6, 2008 12:05:54

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Повышение производительности кода на питоне

izekia
интересные, кстати, вещи, результатов многих замеров банально не ожидал
Вы замеры времени делаете не совсем корректно. Если как описано в первом посте, то мягко говоря, результат может очень не соответствовать действительности. Посмотрите модуль timeit



Офлайн

#2 Авг. 6, 2008 12:09:36

evgenyl
От:
Зарегистрирован: 2008-07-22
Сообщения: 148
Репутация: +  0  -
Профиль   Отправить e-mail  

Повышение производительности кода на питоне

izekia так никто не спорит, яж говорю давай ещё :)
действительно интересные вещи



Отредактировано (Авг. 6, 2008 12:15:18)

Офлайн

#3 Авг. 6, 2008 12:44:52

izekia
От:
Зарегистрирован: 2008-07-19
Сообщения: 317
Репутация: +  12  -
Профиль   Отправить e-mail  

Повышение производительности кода на питоне

Daevaorn
izekia
интересные, кстати, вещи, результатов многих замеров банально не ожидал
Вы замеры времени делаете не совсем корректно. Если как описано в первом посте, то мягко говоря, результат может очень не соответствовать действительности. Посмотрите модуль timeit
спасибо за ссылку
но
By default, timeit() temporarily turns off garbage collection during the timing. The advantage of this approach is that it makes independent timings more comparable. This disadvantage is that GC may be an important component of the performance of the function being measured. If so, GC can be re-enabled as the first statement in the setup string.
и если алгоритм функции чувствителен активности, то все же это следует обсудить отдельно, собственно спасибо за поправку.
Далее, те примеры которые я приводил - проверялись неоднократно, и время - подчеркивает разницу, то есть это был не один запуск данного кода.

Сейчас поправлю все результаты с учетом результата выдаваемого с отключенным gc



Отредактировано (Авг. 6, 2008 12:46:33)

Офлайн

#4 Авг. 6, 2008 13:34:30

izekia
От:
Зарегистрирован: 2008-07-19
Сообщения: 317
Репутация: +  12  -
Профиль   Отправить e-mail  

Повышение производительности кода на питоне

Daevaorn
спасибо за поправку, написал следующий инструмент для более правильных замеров:

from time import clock
import gc
from cStringIO import StringIO
import psyco

def getTime(f, it):
start = clock()
for i in it:
f()
end = clock()
return end - start;

def testIt(f, name, reps = 10):
gcState = gc.isenabled
gc.enable()
it = xrange(reps)
psyco.bind(f)
time1 = getTime(f, it) / reps
psyco.unbind(f)
time2 = getTime(f, it) / reps
gc.disable()
psyco.bind(f)
time3 = getTime(f, it) / reps
psyco.unbind(f)
time4 = getTime(f, it) / reps
if gcState:
gc.enable()
return '%s\t%.5f\t%.5f\t%.5f\t%.5f\tsec/repeat in %d repeats' % (name, time1, time2, time3, time4, reps)

def compareFuncs(funcList, reps = 10):
result = StringIO()
result.write('\tpsy&gc\tgc\t\tpsyco\tclean\n')
for f in funcList:
result.write(testIt(f, str(f).split()[1], reps))
result.write('\n')
result.seek(0)
return result.read()
Немного поправил, теперь это полный текст модуля для сравнения



Отредактировано (Авг. 6, 2008 13:55:34)

Офлайн

#5 Авг. 6, 2008 13:48:13

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Повышение производительности кода на питоне

Результат сильно изменился при таком замере?

Офлайн

#6 Авг. 6, 2008 13:52:21

izekia
От:
Зарегистрирован: 2008-07-19
Сообщения: 317
Репутация: +  12  -
Профиль   Отправить e-mail  

Повышение производительности кода на питоне

Ferroman
Результат сильно изменился при таком замере?
я выше для формирования списка первые результаты поправил
можно сравнить
без использования psyco действительно для сравнения первой и последней функции результат был не совсем корректным, сказалось малое число замеров



Отредактировано (Авг. 6, 2008 13:56:34)

Офлайн

#7 Авг. 6, 2008 14:59:12

izekia
От:
Зарегистрирован: 2008-07-19
Сообщения: 317
Репутация: +  12  -
Профиль   Отправить e-mail  

Повышение производительности кода на питоне

Все, все результаты сравнений я поправил с учетом участия сборщика мусора и использования psyco
Сильно ничего не изменилось, только первый результат, о чем я написал выше.



Офлайн

#8 Авг. 6, 2008 15:05:20

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

Повышение производительности кода на питоне

то всьо класно але осовна проблема в пітона з задачками - це дуже повільне зчитування і вивід даних



Офлайн

#9 Авг. 6, 2008 15:06:25

izekia
От:
Зарегистрирован: 2008-07-19
Сообщения: 317
Репутация: +  12  -
Профиль   Отправить e-mail  

Повышение производительности кода на питоне

я как раз это и хотел замерять, и посмотреть где проблема



Офлайн

#10 Авг. 6, 2008 15:30:36

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

Повышение производительности кода на питоне

можна потестити тут http://www.spoj.pl/problems/INTEST/



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version