【问题标题】:Sharing global dictionary between requests在请求之间共享全局字典
【发布时间】:2019-01-08 23:40:14
【问题描述】:

我目前正在开发一个在线实时游戏,它使用全局字典来存储所有游戏房间。如果用户尝试进入游戏,脚本会检查字典以查找空房间。如果没有找到空房间,则将一个新房间对象添加到字典中,以便其他登录的用户可以进入游戏房间。

问题在于,对此类任务使用全局字典并不是一个好主意,正如这些问题中指出的那样:Are global variables thread safe in flask? How do I share data between requests? 和 Preserving global state in a flask application

在答案中,建议将请求共享数据存储在数据库或 memcached 中。如果我想使用数据库方式进行操作,是否应该在每次请求时将整个 dict 存储在数据库中?有没有更好更安全的方法来做到这一点?

【问题讨论】:

    标签: python-3.x flask flask-sqlalchemy


    【解决方案1】:

    我是否应该在每次请求时将整个字典存储在数据库中

    如果您使用数据库(如 SQLite),则整个 dict 应该已经在数据库中。然后,您可以在需要有关游戏室的信息时查询数据库。不要将共享数据的整个dict保留在内存中,将所有共享数据移动到数据库中,从内存中删除带有共享数据的dict,在需要共享数据时查询数据库,并在共享数据更改时更新数据库。

    我建议你try it out。我认为您会发现数据库足够快(且安全)。

    请注意,数据库还具有您可以使用和依赖的ACID 属性。这些 ACID 属性的值目前可能还不清楚,但这会随着您使用数据库的次数而改变。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-10
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      • 2013-04-12
      相关资源
      最近更新 更多