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

时间:2018-01-23 04:51:32

标签: python class flask

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

在这个应用程序中构建和使用了一个具有大量模块(计算密集型)的类,作为常用的关键功能之一,我遇到了一些问题,我正在寻找一些解决方案(让&#39 ; s将其命名为Class A中的a.py}

最初,我将Class A直接导入其中一个view文件,并为其创建了一个route函数,一旦用户点击调用此{{1}的按钮然后,route函数将创建route的实例,并且此实例基于接收的数据(如Json)运行。但我发现系统可能会变慢,因为当用户经常使用该功能时,每次都必须创建Class A的实例(也可能有10个用户),Class A也是如此沉重的一次又一次地创造。

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

提前致谢

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

    如果使用相同的参数/数据再次调用视图,则返回先前的返回值,而不再运行视图函数。

答案 1 :(得分:0)

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

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

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

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