栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python-在Flask会话中存储大数据或服务连接

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python-在Flask会话中存储大数据或服务连接

以下内容适用于你不想为每个请求重新创建的所有全局Python数据,不仅适用于保留,而且适用于每个用户唯一的数据。

我们需要一些公共位置来为每个用户创建一个保留连接。最简单的方法是将a

multiprocessing.Manager
作为单独的进程运行。

import atexitfrom multiprocessing import Lockfrom multiprocessing.managers import baseManagerimport pyRserveconnections = {}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.registerdef 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()

在启动应用程序之前运行它,以便管理器可用:

python rserve_manager.py

在请求期间,我们可以使用简单的功能从应用程序访问此管理器。假设你在会话中具有“ user_id”的值(例如Flask-Login会执行的操作)。这样最终使每个用户(而不是每个会话)的保留连接都是唯一的。

from multiprocessing.managers import baseManagerfrom flask import g, sessiondef 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')

尽管可以进行很多改进,例如不对地址和密码进行硬编码以及不丢弃与管理器的连接,但这应该可以帮助你入门。这是用Python 3编写的,但应该与Python 2一起使用。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/387818.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号