92

PyPy、Django、およびPostgreSQLをうまく連携させるには、どのフォークまたはパッケージの組み合わせを使用する必要がありますか?

PyPy と Django がうまく連携することは知っていますが、PyPy と PostgreSQL についてはあまり確信が持てません。Alex Gaynor がpypy-postgresqlという名前の PyPy のフォークを作成したことがわかります。一部の人々がpsycopg2-ctypesを使用していることも知っています。

これらのフォークに違いはありますか? それとも、安定した 1.9 PyPy を使用して psycopg2-ctypes を使用する必要がありますか? ctypes オプションを使用すると、パフォーマンスが低下する可能性があります。以下のコメントを参照してください。

また、pyscopg2 で PyPy を使用する際に落とし穴を経験した人はいますか? 何かがうまくいかない場合、CPython に頼るのは簡単に思えますが、ほとんどの場合、プログラマーが事前に準備できることを探しています。

調べてみたところ、psycopg2 が PyPy でネイティブに動作するようには見えません。psycopg2-ctypes は一部の人にとっては機能しているようですが、pypy-devに関する議論がありました。私は Windows で作業していますが、残念ながら psycopg2-ctypes はまだ Windows に対応していないと思います。

4

2 に答える 2

36

psycopg2cffi(2015年更新)

psycopg2cffiは、さらに別のpsycopg2互換の代替品であり、PyPyで最高のPostgreSQLパフォーマンスを提供するはずです。これをに追加して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環境変数のディレクトリまたはローカルディレクトリにある)であり、Linuxと同じようにWindowsでも機能することを確認する必要があります。

pypy-postgresql

AlexGaynorがpypy-postgresqlと呼ばれるPyPyのフォークを作成したことは確かです。

長期的にはこれは良い選択ではないと思います。ブランチは1年以上更新されておらず、ビルドの試みは失敗しました。そして、とにかくインタプリタでPostgreSQLドライバをハードコーディングするのは間違っているようです。

pypy-postgresqlにもバイナリはないと思います。したがって、それを使用する場合は、PyPyブランチ全体を自分で構築する必要があります。気の弱い人向けではありません。数十分かかり、少なくとも4GBのメモリを搭載したマシンです。(公式の説明: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」が表示されます

于 2012-06-30T01:07:07.727 に答える
16

いくつかの追加リソース:

于 2012-12-01T21:34:45.087 に答える