繁体   English   中英

如何在启用多进程的 Flask 应用程序中使用全局变量

[英]How to use global variables in Flask app with multiple process enabled

我有一个 Flask 应用程序具有以下应用程序设置:

game_dict = load_game_dict()    
app.run(host="0.0.0.0", debug=False, threaded=False, processes=3)

这里的 game_dict 是一些从数据库加载的元数据。 我们需要每周刷新一次这个 game_dict,所以我定义了另一个 GET 方法让管理员刷新它:

@app.route('/api/admin/reload/dict', methods=['GET'])
def api_admin_reload_dict():
    """ API for reloading game dict from database at runtime """
    global game_dict
    game_dict = load_game_dict()

我发现它不起作用,我调试并发现此调用后的game_dict仍然保持初始值,我猜是因为我在这里使用了processes = 3。

有没有人知道在这种情况下如何处理?

谢谢

多个进程将无法访问彼此的内存。

但是,两个进程可以从共享实体读取数据。 实体可以是内存或其他进程中的数据库或对象。

如果 game_dict 没有保存太多数据,您可以在每次请求之前点击您的数据库并使用新数据重新加载 game_dict 变量。

如果为所有 game_dict 数据访问数据库很慢,那么您可以设置一个计数器标志,每当更新数据库中的 game_dict 元数据时都会更新该标志,然后将当前进程的计数器与数据库的计数器进行比较并更新当前进程的 game_dict 变量如果计数器不同。

或者,您可以使用 Python 的内置Multiprocessing Manager对象通过创建管理共享状态的单独服务器进程来跨进程共享状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM