如何在 Flask 中为每个用户的会话维护一个类实例?



我目前正在构建一个基于 Flask 框架构建的 Web 应用程序,将来应用程序完成后大约有 10 个用户帐户。

有一个带有重型模块(计算密集型)的类,在此应用程序中构建和使用,作为常用的关键功能之一,我遇到了一些问题,正在寻找一些解决方案(让我们将其命名为文件a.py中的Class A)

最初,我将Class A直接导入到其中一个view文件中,并为其创建了一个route函数,一旦用户单击调用此route的按钮,route函数将创建一个Class A实例,并且该实例基于接收到的数据(如Json)运行。但是我发现系统可能会变慢,因为每次用户频繁使用该功能时都必须创建Class A实例(也可以有 10 个用户),并且Class A太重而无法一次又一次地创建。

因此,我在想,我是否可以只创建一次Class A实例(例如,Flask 应用程序启动的时间),并且每个登录用户都可以访问此实例而不是一遍又一遍地创建它?

提前致谢

烧瓶 请求是无状态的,因此为了跨请求保留用户的数据,选项是有限的。以下是一些想法:

  1. 序列化类实例,将其存储在烧瓶会话中(只是浏览器会话 cookie 的包装器),稍后检索。

  2. 将其存储在数据库中,以后需要时检索

  3. 腌制它,使用用户名转储它,在需要时检索。

或者,根据应用程序的不同,缓存解决方案可能足够好(ig 烧瓶缓存)。路由/视图将在第一次调用类时实例化该类并返回一个值。

如果使用相同的参数/数据再次调用视图,则返回上一个返回值,而无需再次运行视图函数。

Flask 有扩展,可以在启动时设置,完全按照您的需要。 文档在这里: http://flask.pocoo.org/docs/0.12/extensiondev/

您可能可以忽略有关 diskutils 等的整个第一部分,并跳转到"初始化扩展"。

我们为此目的使用了这个确切的扩展点,它应该可以工作。

您也可以在类中使用单例模式,但扩展点适用于烧瓶生态系统的其余部分。

最新更新