PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment faire fonctionner PyPy, Django et PostgreSQL ?

psycopg2cffi (Mise à jour 2015)

psycopg2cffi est un autre remplacement compatible avec psycopg2 et devrait fournir les meilleures performances PostgreSQL avec PyPy. Ajoutez ceci à votre settings.py pour rester compatible avec les deux :

try:
    import psycopg2
except ImportError:
    # Fall back to psycopg2cffi
    from psycopg2cffi import compat
    compat.register()

psycopg2-ctypes (2012)

Je sais aussi que certaines personnes utilisent psycopg2-ctypes.

C'est le moyen le plus simple; pour rester compatible avec les deux, ajoutez simplement ce code dans votre Django settings.py :

try:
    import psycopg2
except ImportError:
    # Fall back to psycopg2-ctypes
    from psycopg2ct import compat
    compat.register()

J'ai testé cela il y a quelques versions; malheureusement, d'après mon expérience, psycopg2-ctypes annule les petits gains de performances offerts par PyPy. Mais YMMV, cela dépend de la compatibilité générale de votre code avec JIT et de la fraction de temps que vous passez réellement à exécuter du code Python. Et peut-être que PyPy s'est amélioré depuis.

et je ne pense pas que psycopg2-ctypes soit encore prêt pour Windows

Je n'ai pas essayé cela, mais ctypes est indépendant de la plate-forme. AFAICT vous devez juste vous assurer que le libpq.dll La bibliothèque est chargeable (située dans un répertoire de votre variable d'environnement PATH ou répertoire local) et elle devrait fonctionner sous Windows comme sous Linux.

pypy-postgresql

Je vois qu'Alex Gaynor a créé un fork de PyPy appelé pypy-postgresql.

Je ne pense pas que ce soit un bon choix à long terme. La branche n'a pas été mise à jour depuis plus d'un an et mes tentatives pour la construire ont échoué. Et il semble de toute façon erroné de coder en dur un pilote PostgreSQL dans l'interpréteur.

Je crois qu'il n'y a pas non plus de binaires de pypy-postgresql, donc si vous voulez l'utiliser, vous devrez créer vous-même toute la branche PyPy. Pas pour les âmes sensibles :cela prend des dizaines de minutes et une machine avec au moins 4 Go de mémoire. (Instructions officielles :http://pypy.org/download.html#building-from-source)

Pour construire, vous avez d'abord besoin de la source. Si vous avez installé Mercurial, vous pouvez simplement hg clone https://bitbucket.org/alex_gaynor/pypy-postgresql . Sinon, vous pouvez télécharger le fichier zip automagic "tip" :https://bitbucket.org/alex_gaynor/pypy-postgresql/get/tip.zip

Ouvrez une ligne de commande, allez dans le répertoire décompressé, puis dans pypy/translator/goal

Si vous avez installé PyPy, il est recommandé de l'utiliser pour la construction :

pypy translate.py -Ojit

Sinon :

python translate.py -Ojit

Malheureusement, c'est là que s'arrêtent mes connaissances. J'obtiens l'erreur "BytecodeCorruption: unimplemented opcode, ofs=234, code=203, name=BUILD_LIST_FROM_ARG "