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 サイトの他の関連記事を参照してください。