Maison > développement back-end > Tutoriel Python > Comment maintenir des connexions Rserve uniques par session utilisateur dans Flask ?

Comment maintenir des connexions Rserve uniques par session utilisateur dans Flask ?

Linda Hamilton
Libérer: 2024-12-15 16:46:15
original
230 Les gens l'ont consulté

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

Maintenir des connexions uniques dans les sessions Flask

Problème :
Dans une application Flask, il est nécessaire de établir et maintenir des connexions uniques à un service (dans ce cas, Rserve) pour chaque session utilisateur. Le stockage de l'objet de connexion dans la session échoue en raison de sa sérialisabilité non JSON, tandis que l'utilisation de flask.g ne garantit pas la persistance.

Solution :
Pour résoudre ce problème, nous séparez la création de connexions Rserve des demandes des utilisateurs en employant un multiprocessing.Manager. Ce processus externe gère les connexions de chaque utilisateur. Voici le code :

Processus de gestionnaire séparé (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()
Copier après la connexion

Accès au gestionnaire à partir de l'application 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
Copier après la connexion

Utilisation dans un Vue :

result = get_rserve().eval('3 + 5')
Copier après la connexion

Cette approche fournit des connexions uniques par utilisateur, permettant la maintenance de données spécifiques à une session ou de connexions de service dans les applications Flask.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal