Python中的系统文件读取缓冲
我的TCP服务器写在Tornado(Python web框架)上,每1-10秒接收一次数据。然后我需要在每次迭代中读取我的文件'example.txt',在这里我以列表格式(JSON)存储数据,将我的数据与旧数据合并,然后再次写入该文件。 有一个问题-在一段时间(或一段时间/一定数量的数据)之后,文件开始缓存(或缓冲),所以每次我想读取它时,我都会从文件中获取不相关的数据。但文件仍然可以编写,Python编写新的,但与非相关数据合并到文件中,我可以从修改文件时看到它Python中的系统文件读取缓冲,python,filesystems,buffer,tornado,Python,Filesystems,Buffer,Tornado,我的TCP服务器写在Tornado(Python web框架)上,每1-10秒接收一次数据。然后我需要在每次迭代中读取我的文件'example.txt',在这里我以列表格式(JSON)存储数据,将我的数据与旧数据合并,然后再次写入该文件。 有一个问题-在一段时间(或一段时间/一定数量的数据)之后,文件开始缓存(或缓冲),所以每次我想读取它时,我都会从文件中获取不相关的数据。但文件仍然可以编写,Python编写新的,但与非相关数据合并到文件中,我可以从修改文件时看到它 open('example.
open('example.txt','r',0)
-没有帮助python-u
-flag没有帮助Python非缓冲变量
-没有帮助file.flush()、os.fsync()
-没有帮助
p.S.生产服务器正在CentOs上运行
def saveToFile(self, data, path):
if os.path.exists(path) == True:
with open(path, 'r', 0) as f:
old = f.read()
try:
old = json.loads(old)
except ValueError:
old = {}
else:
old = {}
data_to_save = dict(old.items() + data.items())
with open(path, 'w', 0) as f:
f.write(json.dumps(data_to_save))
我在获取数据的每个新部分调用此方法。使用memcached服务怎么样?问题不是你认为的那样。系统不会无缘无故地向您提供过时数据。您是否在每次迭代期间打开和关闭文件?您是否有一个适当的锁,使两个文件访问不能同时发生?请将您的程序减少到可能显示错误的最小程序,并将该简短程序复制粘贴到您的问题中。当然,这是可能的解决方案,因为我们使用Redis,但目前我需要使用文件解决此问题。1) Y 2)我没有锁,因为读写文件逐行执行,文件处理在新连接到来之前结束。“我试着锁具,但没什么区别。”罗布ᵩ, 这个怎么样?