Outils pour utilisateurs

Outils du site


psyco

Accélération des programmes grâce à "psyco"

Introduction

psyco est un module qu'on installe et qui permet d'accélérer l'exécution de n'importe quel programme Python de x2 à x100.

En fait, psyco ajoute une compilation en code machine alors que la compilation normale de Python s'arrête aux “bytecodes” qui sont eux-même interprétés.

De ce fait, psyco est limité aux processeurs de type i386.

Site de référence: http://psyco.sourceforge.net/

Le manuel est ici: http://psyco.sourceforge.net/psycoguide/index.html

Installation de psyco

Windows

Téléchargement de la version exécutable Windows psyco-1.6.win32-py25.exe (pour Python version 2.5) trouvée ici: http://sourceforge.net/project/showfiles.php?group_id=41036

Pour l'installation, il suffit d'exécuter ce programme, et le module psyco vient se loger dans C:\Python25\Lib\site-packages.

Si vous avez une version de Python inférieure à 2.5, cherchez le bon programme au même endroit (pour Python v 2.4 ou 2.3).

Pour Windows: psyco est compatible avec py2exe, ce qui fait qu'un programme pourra s'exécuter accéléré par psyco, sans que celui-ci ne soit installé sur le PC.

Linux

Pour Linux, il est conseillé de partir de la source et de la compiler.

Téléchargement de psyco-1.6-src.tar.gz trouvé ici: http://sourceforge.net/project/showfiles.php?group_id=41036

On désarchive dans le répertoire site-packages de Python (sous la suse 10.3, c'est: /usr/lib/python2.5/site-packages)

Il faut avoir installé tout ce qu'il faut pour une compilation: à voir selon votre distribution. Pour la mienne (suse 10.3), c'est:

  • gcc
  • binutils
  • make
  • kernel-source
  • kernel-sym
  • python-devel

En console sous root, on se place dans le répertoire en question (chez moi: /usr/lib/python2.5/site-packages/psyco-1.6). Et on fait:

python setup.py install

S'il y une une erreur, c'est qu'il manque quelque chose pour la compilation dans votre distribution: lisez les codes d'erreur. S'il n'y a pas d'erreur: ça y est, vous avez psyco!

Utilisation

Dans le code du programme principal, vous mettez par exemple:

if __name__ == "__main__":
    try:
        import psyco
        psyco.full()
    except ImportError:
        pass
    ...
    suite de votre programme
    ...

L'avantage, c'est que si le module psyco n'est pas disponible, votre programme s'exécutera normalement (non-accéléré).

Et c'est tout!

A titre d'essai, je vous propose une fonction qui cherche la liste de tous les nombres premiers inférieurs à une valeur donnée:

#!/usr/bin/python
# -*- coding: latin1 -*-
from __future__ import division
 
import time
from math import *
 
def premiers(n):
    """premiers(n): trouve tous les nombres premiers <= n et les affiche sous forme d'une liste"""
    if n==1:
        return []
    if n==2:
        return [2]
    if n in (3,4):
        return [2,3]
    if n in (5,6):
        return [2,3,5]
    p=[2,3,5]
    k=7
    while k<=n:
        rk=int(sqrt(k))+1
        i=0
        while i<len(p):
            if p[i]>rk:
                p.append(k)
                break
            if (k % p[i])==0:
                break
            i+=1
        k+=2
    return p
 
if __name__ == "__main__":
    try:
        import psyco
        psyco.full()
    except ImportError:
        pass
    tps=time.clock()
    premiers(1000000)
    print time.clock()-tps

Pour comparer “avec ou sans psyco”, il suffit de mettre psyco en commentaire dans le code pour la partie “sans psyco”.

Résultat des courses: avec premiers(1000000), on trouve:

  • sans psyco: 7.077 secondes
  • avec psyco: 0.460 seconde

Ce qui représente tout de même une division par 15 du temps de calcul!

Mes différents essais m'ont montré que sur certains programmes, on était proche du temps de calcul du C.

Autres utilisations et limitations de psyco

  • Pour l'instant, je n'utilise que “psyco.full()”, mais il existe d'autres fonctions qui permettent une utilisation plus subtile de psyco. Par exemple, n'accélérer que certaines fonctions, en exclure d'autres, voire disposer pour la même fonction d'une version accélérée et d'une autre normale.
  • Il existe un certain nombre de limitations qui sont expliquées (en anglais) sur le site de psyco. Ces limitations peuvent porter sur certaines fonctions à éviter, ou sur certains types de code.

Pour ces 2 points, voir sur le site http://psyco.sourceforge.net/, et en particulier le manuel: http://psyco.sourceforge.net/psycoguide/index.html

psyco.txt · Dernière modification: 2008/07/02 09:52 de tyrtamos

Outils de la page