首页 > 解决方案 > 重新初始化烧瓶扩展

问题描述

我正在使用烧瓶。我定义了一些昂贵的路由,因为它们需要访问数据库并进行冗长的计算。数据库连接依赖于 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。事实上,扩展只能初始化一次,但是在多个线程上需要扩展并且不是线程安全的会发生什么?

标签: flaskflask-mongoengine

解决方案


推荐阅读