Flask 세션에서 고유한 연결 유지
문제:
Flask 애플리케이션에서는 다음 사항이 필요합니다. 각 사용자에 대해 서비스(이 경우 Rserve)에 대한 고유한 연결을 설정하고 유지합니다. 세션. JSON이 아닌 직렬성으로 인해 세션에 연결 개체를 저장하는 데 실패하고, 플라스크.g를 사용하면 지속성이 보장되지 않습니다.
해결책:
이 문제를 해결하려면 multiprocessing.Manager를 사용하여 Rserve 연결 생성을 사용자 요청과 분리합니다. 이 외부 프로세스는 각 사용자의 연결을 관리합니다. 코드는 다음과 같습니다.
별도의 Manager 프로세스(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 애플리케이션에서 Manager에 액세스:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!