Найти - Пользователи
Полная версия: psyco замедляет?
Начало » Python для новичков » psyco замедляет?
1
asilyator
from timeit import Timer
import re

try:
import psyco
psyco.full()
except ImportError:
print 'Psyco not installed, the program will just run slower'

str = "www.zaycev.net"
substr = "zaycev.net"
times = int(1e5)

strre=re.compile(substr, re.IGNORECASE)

def search_find():
return str.find(substr) != -1



def search_regexp():
return strre.search(str)

print "Testing find search"
print Timer(search_find).timeit(times)

print "Testing regexp search"
print Timer(search_regexp).timeit(times)


"""
1e5 iterations

no psyco
Testing find search
0.264238331967
Testing regexp search
0.713423912816

psyco
Testing find search
0.413242465174
Testing regexp search
1.04500544064
"""
WTF?
Zubchick
замедляет при неверном использовании.
asilyator
А чем правильное отличается от неправильного?
Zubchick
вот тут целая статья про это… http://www.ibm.com/developerworks/ru/library/l-psyco/
Андрей Светлов
asilyator, касательно вашего примера - psyco не поможет. Регулярные выражения реализованы в _re (а re - тонкая обертка сверху), который написан на С.
Ускорять там нечего - нет кода на Питоне.

Теперь про psyco вообще. Не люблю.
1. Не работает на 64 битных системах - и никогда не научится. Проект мертв.
2. Делать psyco.full() попросту нельзя - нужно находить тонкие места и указывать компиляцию только выборочных функций.
Надеюсь, вы уже научились использовать питоновский профайлер?
3. Далее. Даже зная те 3% (я не согласен с оценкой автора статьи в 10% - слишком много) кода, которые стоит оптимизировать - не уверен, что psyco лучший выход.

Я поступаю так: через dis.dis смотрю на дизассемблер байткода проблемных функций. При некоторой сноровке читается легко и дает много открытий чудных.
Кое-какая оптимизация может быть сделана в самом питоновском коде.
Например
for i in range(100):
a.b.c.f(i)
меняется на
f = a.b.c.f
for i in range(100):
f(i)
и оно сильно помогает.

Далее берем Cython (http://www.cython.org/) и переносим функцию в pyx файл. Правим, внося объявления типов где нужно. Получаем максимальную теоретически достижимую для psyco скорость.
Смотрим на результат (cython -a xx.pyx). Правим, пока не почувствуем облегчение.

Вообще говоря, оптимизация - сложная и комплексная штука. Первые шаги я описАл.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB