我正在使用带有 python 的 Flask 服务器。
我有一个整数 pics_to_show
.每次收到请求,用户都会收到 pics_to_show
整数。和 pics_to_show
减 1。pics_to_show
是一个与所有网站用户共享的整数。我可以制作一个数据库来保存它,但我想要更简单和灵活的东西。有没有其他方法可以保存这个整数。
我制作了一个将此类变量保存在 JSON 文件中的类。
class GlobalSate:
def __init__(self, path_to_file):
self.path = path_to_file
try:
open(path_to_file)
except FileNotFoundError:
f = open(path_to_file, 'x')
f.write('{}')
def __getitem__(self, key):
file = self.load_file()
data = json.loads(file.read())
return data[key]
def __setitem__(self, key, value):
file = self.load_file()
data = json.loads(file.read())
data[key] = value
json.dump(data, open(self.path, 'w+'), indent=4)
def load_file(self):
return open(self.path, 'r+')
这个类当然过于简化了。我在 __init__.py
中初始化了一个实例并将其导入所有路由文件(我正在使用 BluePrints)。我的应用程序是线程化的,所以这个类可能不起作用......因为多个用户同时编辑数据。有人有其他解决方案吗?
笔记:
g
变量不起作用,因为数据在 之间共享用户 不是 请求 .另外,如果我想每周增加这样的变量怎么办?运行单独的python脚本来跟踪日期或检查每个服务器请求的日期是否是线程安全的?
最佳答案
您肯定会以不一致的状态结束,如果没有读取和写入之间的锁定机制,您将遇到竞争条件。所以你会失去一些增量。
此外,您没有关闭打开的文件,如果这样做的次数足够多,它会使应用程序崩溃。
还有一个很好的建议是,您不想编写状态管理软件,(数据库)很难做到正确。
我认为在您的情况下,最好的解决方案是使用 sqlite,因为它是您从应用程序调用的库,没有额外的服务器。
“我可以制作一个数据库来保存它,但我想要更简单灵活的东西”
在多线程应用程序中,您不能比 sqlite 更简单(如果您希望您的应用程序正确无误)。
如果您不喜欢 SQL,那么还有一些更简单的选择:
关于python - 如何保存和编辑服务器渲染数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63338942/