>백엔드 개발 >파이썬 튜토리얼 >Flask에서 사용자 세션당 고유한 Rserve 연결을 유지하는 방법은 무엇입니까?

Flask에서 사용자 세션당 고유한 Rserve 연결을 유지하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-15 16:46:15233검색

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

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.