flask - 重新初始化烧瓶扩展
问题描述
我正在使用烧瓶。我定义了一些昂贵的路由,因为它们需要访问数据库并进行冗长的计算。数据库连接依赖于 Flask-Mongoengine 扩展,该扩展依赖于非线程安全的 PyMongo。
因此,我的想法如下:
@blueprint.route("/refresh/data", methods=['GET'])
def refresh_data():
cache.clear()
with Pool(4) as p:
print(p.map(func=f, iterable=["recently", "mtd", "ytd", "sector"]))
获取一个小池并调用函数 f。函数 f 基于
def f(name):
print(current_app.extensions)
print(current_app.config)
current_app.extensions["mongoengine"] = MongoEngine(app=current_app)
print(current_app.extensions)
get(address="reports/{path}/json".format(path=name))
get(address="reports/{path}/html".format(path=name))
return name
这里的问题是不能再次init_app MongoEngine。事实上,扩展只能初始化一次,但是在多个线程上需要扩展并且不是线程安全的会发生什么?
解决方案
推荐阅读
- reactjs - React Hook 依赖项 - 通用 Fetch Hook
- windows - 更改版本和 MSI 并让版本信息反映在文件属性高级安装程序中
- azure - 合并时触发 Azure 管道
- indexing - 重置重做/撤消索引 [Tabulator]
- c - 为什么在运行 C 程序时终端会死机?
- scala - 柯里化类型“不带类型参数”
- rust - 自己为结构派生属性和实现特征有什么区别?
- rust - 如何将 RangeInclusive 转换为 Range?
- java - 扫描文本文件时如何跳过前导字符串?
- scala.js - 如何让 Scala .js 1.3.0 教程运行 - 第 2 部分?