Xgu.ru теперь в Контакте  — приходите и подключайтесь.
Пока мы работаем над следующими видео, вы можете подключиться в Контакте. Познакомимся и обсудим новые страницы и ролики.

Vk-big.pngYoutube-big.jpeg

Psyco

Материал из Xgu.ru

Перейти к: навигация, поиск


Psyco — модуль для языка Python, предназначенный для повышения с помощью JIT-компиляции производительности программ, в которых он используется.

Сейчас Psyco не развивается, хотя и широко используется. Автор сообщал, что собирается перенести идеи из Psyco в PyPy, потом было заявлено о работе над Psyco2[1].

Psyco позволяет повысить скорость исполнения программы в несколько раз (от 2 до 100, но в среднем в 4 раза [2]). Теоретически, производительность может быть повышена до уровня аналогичного кода на Си.

Psyco не требует никаких изменений в коде. Однако, некоторые конструкции он оптимизирует лучше. Например, циклы for...in циклы значительно медленнее циклов while. Первая конструкция в 17 раз быстрее чем вторая[3].

Цикл с использованием while (быстрее):

        key = 0
        while key < data.length: 
            val = data[key]
            key += 1

Цикл с использованием for...in (медленнее):

        for key,val in enumerate(data):
           val

[править] Использование

Инсталляция (для Debian):

%$ apt-get install python-psyco

Задача: найти количество подряд идущих пар чисел до миллиона, у которых количество делителей одинаково.

Решение:

#!/usr/bin/python

import psyco
psyco.full()

def main():
   s=0
   N=10000000
   a=[0]*(N+1)
   for i in range(1,N+1):
       for j in range(1,(N+1)/i+1):
           if i*j<=N:
               a[i*j]+=1
       if a[i]==a[i-1]: s+=1
   return s
print main()

Включение Psyco выполняется всего лишь двумя строчками:

import psyco
psyco.full()

Время исполнения с Psyco:

$ time python 179.py 
986262

real	0m12.346s
user	0m12.077s
sys	0m0.072s

Время исполнения без Psyco:

$ time python 179.py 
986262

real	1m43.455s
user	1m42.178s
sys	0m0.696s

Различие в производительности почти в 10 раз:

$ echo 103.45/12.346 | bc -l
8.379

[править] Дополнительная информация

На главной странице проекта появилось сообщение, датируемое "12 March 2012": Psyco is unmaintained and dead. Please look at PyPy for the state-of-the-art in JIT compilers for Python.

В репозиториях Debian данный пакет присутствует только в ветке squeeze (oldstable)

[править] Примечания

  1. http://codespeak.net/pipermail/pypy-dev/2009q3/005288.html
  2. http://psyco.sourceforge.net/introduction.html
  3. https://www.pooryorick.com/secure/wiki/Pub/Psyco
Источник — «http://2.xgu.ru/wiki/Psyco»
На других языках