在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中文網其他相關文章!