如何知道 file.write() 何时完成



我有一个python服务器,它从客户端连续接收图像。 对于每个图像,我需要将其保存到磁盘并创建一个csv,其中包含图像路径和每个图像的整数值。 我的问题是,当图像保存到磁盘时,我重置了字节数组。所以只有图像的顶部是可见的,因为我在PC仍在保存图像时清除了数组。 我如何知道文件何时完全保存?

conn, addr = s.accept()
print('Connect with ' + addr[0] + ':' + str(addr[1]))
data = b''
while True:
buf = conn.recv(4096)
data = data + buf
if len(buf) < 4096:
date_string = str(datetime.datetime.now().timestamp()).replace('.', '')
with open('./images/' + date_string + '.jpg', 'ab') as f:
f.write(data)
data = b''
conn.send(str.encode("OKn"))

更新:

我试图更好地解释这种情况:

从安卓设备(客户端(中,我从相机捕获连续帧,我需要对其进行后处理以进行机器学习。 设备捕获的每一帧都将发送到python服务器(上面的代码(。在客户端(智能手机(发送下一帧之前,我必须确保前一帧已保存到磁盘(计算机硬盘(。事实上,"conn.send(str.encode("OK"((行需要对客户端说"好的,我保存了图像,你可以给我发送下一个"。但是在清理包含实际图像的数据变量之前,我必须确保 f.write(( 已完成。

检查文档后,似乎您不应该检查数据的大小,而应该只是附加直到您不再接收数据:

conn, addr = s.accept()
print('Connect with ' + addr[0] + ':' + str(addr[1]))
data = b''
while True:
buf = conn.recv(4096)
if buf:
data = data + buf
conn.send(str.encode("OKn"))
else:
break
date_string = str(datetime.datetime.now().timestamp()).replace('.', '')
with open('./images/' + date_string + '.jpg', 'ab') as f:
f.write(data)

也许中间有一些包的大小不同,但并不意味着是最后一个包。 此外,这还具有更多优势,因为您永远不需要重置数据变量。

最新更新