Форум сайта python.su
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
"""
Офлайн
замедляет при неверном использовании.
Офлайн
А чем правильное отличается от неправильного?
Офлайн
вот тут целая статья про это… 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)
Офлайн