PyPy、DjangoとPostgreSQLが一緒にNiceをプレイするために使用するフォークまたはパッケージの組み合わせはどれですか?
私はPyPyとDjango一緒にナイスプレイしますが、PyPyとPostgreSQLについてはあまり確信がありません。アレックスゲイナーが pypy-postgresql 。また、一部の人々が psycopg2-ctypes を使用していることも知っています。
これらのフォークの間に違いはありますか?または、安定した1.9 PyPyを使用し、psycopg2-ctypesを使用する必要がありますか? ctypesオプションを使用すると、パフォーマンスが低下する可能性があります。以下のコメントを参照してください。
また、pyscopg2でPyPyを使用するときに落とし穴を経験した人はいますか?何かが正しく機能しない場合は、CPythonにフォールバックするのは簡単なようですが、ほとんどの場合、プログラマが事前に準備できることを探しています。
周りを見回したところ、psycopg2がPyPyでネイティブに動作しているようには見えません。一部の人にはpsycopg2-ctypesが機能しているようですが、 pypy-dev についての議論がありました。私はWindowsで作業していますが、残念ながらpsycopg2-ctypesはまだWindowsに対応していません。
psycopg2cffi はpsycopg2互換のもう1つの代替品であり、PyPyで最高のPostgreSQLパフォーマンスを提供するはずです。これをsettings.py
に追加して、両方との互換性を維持します。
try:
import psycopg2
except ImportError:
# Fall back to psycopg2cffi
from psycopg2cffi import compat
compat.register()
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環境変数内のディレクトリまたはローカルディレクトリにある)であり、Linuxと同様にWindowsでも機能することを確認する必要があります。
Alex Gaynorがpypy-postgresqlと呼ばれるPyPyのフォークを作成したことはわかります。
これは長期的には良い選択ではないと思います。ブランチは1年以上更新されておらず、ブランチを構築する私の試みは失敗しました。とにかく、インタプリタでPostgreSQLドライバをハードコードするのは間違っているようです。
私はpypy-postgresqlのバイナリも存在しないと信じているので、それを使用したい場合は、PyPyブランチ全体を自分で構築する必要があります。心臓の弱い人には向いていません。数十分で、4 GB以上のメモリを搭載したマシンが必要です。 (公式指示: http://pypy.org/download.html#building-from-source )
ビルドするには、最初にソースが必要です。 Mercurialがインストールされている場合は、単純にhg clone https://bitbucket.org/alex_gaynor/pypy-postgresql
を使用できます。そうでない場合は、automagicの「tip」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
」というエラーが表示されます
追加のリソース: