Как вы получаете PyPy, Django и PostgreSQL для совместной работы? - PullRequest
90 голосов
/ 19 февраля 2012

Какую вилку или комбинацию пакетов следует использовать, чтобы PyPy, Django и PostgreSQL играли вместе?

Я знаю, что PyPy и Django хорошо играют вместе, но я менее уверен в PyPy и PostgreSQL,Я вижу, что Алекс Гейнор сделал форк PyPy под названием pypy-postgresql .Я также знаю, что некоторые люди используют psycopg2-ctypes .

Есть ли разница между этими вилками?Или мы должны использовать стабильный 1.9 PyPy и использовать psycopg2-ctypes?Использование параметров ctypes может снизить производительность, см. Комментарий ниже.

Кроме того, кто-нибудь сталкивался с какими-либо подводными камнями при использовании PyPy с pyscopg2?Кажется, достаточно легко вернуться к CPython, если что-то не работает должным образом, но в основном я ищу вещи, которые программист может сделать заранее, чтобы подготовиться.

Я огляделся, это не похожеэтот psycopg2 изначально работает с PyPy.Хотя psycopg2-ctypes, похоже, работает для некоторых людей, было обсуждение pypy-dev .Я работаю в Windows, и я не думаю, что psycopg2-ctypes еще готов для Windows, к сожалению.

Ответы [ 2 ]

33 голосов
/ 30 июня 2012

psycopg2cffi (обновлено 2015)

psycopg2cffi - это еще одна совместимая с psycopg2 замена, которая должна обеспечить лучшую производительность PostgreSQL с PyPy. Добавьте это к вашему settings.py, чтобы остаться совместимым с обоими:

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

psycopg2-ctypes (2012)

Я также знаю, что некоторые люди используют psycopg2-ctypes.

Это самый простой способ; чтобы оставаться совместимым с обоими, просто добавьте этот код в Django settings.py:

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

Я проверял это несколько релизов назад; к сожалению, по моему опыту, psycopg2-ctypes сводит на нет небольшой прирост производительности, обеспечиваемый PyPy. Но YMMV, это зависит от того, насколько JIT-дружественен ваш код в целом, и какую долю времени вы фактически тратите на выполнение кода Python. И, возможно, с тех пор PyPy только что улучшился.

и я не думаю, что psycopg2-ctypes еще готов для Windows

Я не пробовал этого, но ctypes не зависит от платформы. AFAICT, вам просто нужно убедиться, что библиотека libpq.dll является загружаемой (находится в каталоге в переменной окружения PATH или в локальном каталоге), и она должна работать в Windows, как в Linux.

PyPy-1028 * PostgreSQL * Я вижу, что Алекс Гейнор сделал форк PyPy под названием pypy-postgresql. Я не думаю, что это хороший выбор в долгосрочной перспективе. Филиал не обновлялся более года, и мои попытки его построить не увенчались успехом. В любом случае, неправильно интерпретировать драйвер PostgreSQL в интерпретаторе. Я полагаю, что в pypy-postgresql также нет бинарных файлов, поэтому, если вы хотите использовать его, вам нужно собрать всю ветку PyPy самостоятельно. Не для слабонервных: это занимает десятки минут и машина с по крайней мере 4 ГБ памяти. (Официальные инструкции: http://pypy.org/download.html#building-from-source) Для сборки сначала нужен источник. Если у вас установлен Mercurial, вы можете просто hg clone https://bitbucket.org/alex_gaynor/pypy-postgresql. Если нет, то вы можете загрузить автоматический zip-файл с подсказкой: https://bitbucket.org/alex_gaynor/pypy-postgresql/get/tip.zip Откройте командную строку, перейдите в распакованный каталог, а затем внутри pypy/translator/goal Если у вас установлен PyPy, рекомендуется использовать его для сборки: pypy translate.py -Ojit В противном случае: python translate.py -Ojit К сожалению, на этом мои знания заканчиваются. Я получаю ошибку "BytecodeCorruption: unimplemented opcode, ofs=234, code=203, name=BUILD_LIST_FROM_ARG"

16 голосов
/ 02 декабря 2012

Некоторые дополнительные ресурсы:

...