質問

Ajax Long Polling and Geventを使用して、チャットを実装しました。読むには、クライアントが更新ビューをajaxにし、gevent.event.waitを待機して更新を待ちます。

問題:リクエストの開始時にDjangoによって開かれたPostgreSQLトランザクション(セッション情報を取得するため)は、リクエストの終了まで閉じられません。そして、これらのアイドルトランザクションは多くの記憶を取ります。

リクエストを閉じることなくPostgreSQLトランザクションを閉じる最もクリーンな方法は何でしょうか?私は現在、request_finished信号を手動で送信しますが、ハックのように感じます。

役に立ちましたか?

解決

とにかく、あなたがそれをしている方法は、おそらくあなたのハックのフレームワーク内の最良の方法です。次のようなものを使用する代わりに、リクエスト応答プロセスにロングポールを靴を履こうとしている理由はありますか django-socketio?

他のヒント

ここを参照してください: https://docs.djangoproject.com/en/dev/topics/db/transactions/#django.db.transaction.commit_manially

@transaction.commit_manually
def yourview(request):
    # do your db actions
    transaction.commit()

または、コンテキストマネージャーを好む場合:

def yourview(request):
    ...
    with transaction.commit_manually():
         # do your db actions
    ...

また、PostgreSQL接続を開いているメモリの問題がある場合は、PGBouncerまたは存在するさまざまなGevent接続プールを使用してプールソリューションを見る必要があります。これを行うことで、かなりのパフォーマンスの向上が表示されるはずです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top