ホームページ > バックエンド開発 > Python チュートリアル > Flask でユーザー セッションごとに一意の Rserve 接続を維持するにはどうすればよいですか?

Flask でユーザー セッションごとに一意の Rserve 接続を維持するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-15 16:46:15
オリジナル
237 人が閲覧しました

How to Maintain Unique Rserve Connections Per User Session in Flask?

Flask セッションでの一意の接続を維持する

問題:
Flask アプリケーションでは、次のことが必要になります。ユーザー セッションごとにサービス (この場合は Rserve) への一意の接続を確立し、維持します。接続オブジェクトをセッションに保存すると、非 JSON 直列化可能性が原因で失敗しますが、flask.g を使用すると永続性が保証されません。

解決策:
この問題を解決するには、次のようにします。 multiprocessing.Manager を使用して、Rserve 接続の作成をユーザー要求から分離します。この外部プロセスは、各ユーザーの接続を管理します。コードは次のとおりです:

独立したマネージャー プロセス (rserve_manager.py):

import atexit
from multiprocessing import Lock
from multiprocessing.managers import BaseManager
import pyRserve

connections = {}
lock = Lock()


def get_connection(user_id):
    with lock:
        if user_id not in connections:
            connections[user_id] = pyRserve.connect()

        return connections[user_id]


@atexit.register
def close_connections():
    for connection in connections.values():
        connection.close()


manager = BaseManager(('', 37844), b'password')
manager.register('get_connection', get_connection)
server = manager.get_server()
server.serve_forever()
ログイン後にコピー

Flask アプリケーションからマネージャーへのアクセス:

from multiprocessing.managers import BaseManager
from flask import g, session

def get_rserve():
    if not hasattr(g, 'rserve'):
        manager = BaseManager(('', 37844), b'password')
        manager.register('get_connection')
        manager.connect()
        g.rserve = manager.get_connection(session['user_id'])

    return g.rserve
ログイン後にコピー

での使用法ビュー:

result = get_rserve().eval('3 + 5')
ログイン後にコピー

このアプローチは、ユーザーごとに固有の接続を提供し、Flask アプリケーションでのセッション固有のデータまたはサービス接続のメンテナンスを可能にします。

以上がFlask でユーザー セッションごとに一意の Rserve 接続を維持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート