[解決済み] PyPy、Django、PostgreSQLを連携させるには?
質問
PyPy、Django、PostgreSQLを一緒に使うには、どのフォーク、またはパッケージの組み合わせを使うべきですか?
PyPyとDjangoがうまく動作することは知っていますが、PyPyとPostgreSQLについてはあまり確信がありません。Alex GaynorがPyPyのフォークを作ったのは知っています。 pypy-postgresql . また、何人かの人が psycopg2-ctypes .
これらのフォークに違いはあるのでしょうか?それとも安定版1.9のPyPyを使って、psycopg2-ctypesを使うべきですか?ctypesオプションを使うとパフォーマンスが落ちる可能性があります、以下のコメントを参照してください。
また、pyscopg2でPyPyを使用する際に何か落とし穴を経験した人はいますか? 何かが正しく動作しない場合にCPythonにフォールバックすることは十分に簡単だと思いますが、主にプログラマが準備するために前もってできることを探しています。
psycopg2 は PyPy でネイティブに動作するようには見えません。しかし、psycopg2-ctypes は何人かの人のために動いているようで、次のような議論がありました。 pypy-dev . 私はWindowsで仕事をしていますが、悲しいかな、psycopg2-ctypesはまだWindowsの準備ができていないと思います。
どのように解決するのですか?
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環境変数またはローカルディレクトリにあること)を確認するだけで、WindowsでもLinuxと同じように動作するはずです。
pypy-postgresql
Alex Gaynorが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
"。
関連
-
[解決済み] 関数デコレータを作成し、それらを連鎖させるには?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] リストの最後の要素を取得する方法
-
[解決済み] Pythonで文字列の部分文字列を取得するにはどうすればよいですか?
-
[解決済み] PostgreSQL コマンドラインユーティリティ: psql を終了する方法
-
[解決済み] ファイルへの追記はどのように行うのですか?
-
[解決済み] PostgreSQLのユーザーパスワードを変更する方法を教えてください。
-
[解決済み] Flaskで1時間ごとに関数を実行するようにスケジュールするには?
-
[解決済み] Ctrl-CでPythonスクリプトを終了できない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PythonでのAWS Lambdaのインポートモジュールエラー
-
[解決済み] Pythonのマルチプロセッシングプールimap_unorderedの呼び出しの進捗を表示しますか?
-
[解決済み] python-requests モジュールからのすべてのリクエストをログに記録します。
-
[解決済み] PyMongoで.sortを使用する
-
[解決済み] Cythonのコードを含むPythonパッケージはどのように構成すればよいのでしょうか?
-
[解決済み] tensorflowのCPUのみのインストールでダイナミックライブラリ 'cudart64_101.dll' を読み込めなかった
-
[解決済み] subprocess.run()の出力を抑制またはキャプチャするには?
-
[解決済み] Pandasのデータフレーム内の文字列を'date'データ型に変換するにはどうしたらいいですか?
-
[解決済み] Python Empty Generator 関数
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する