怎么知道什么时候文件.write()已完成

2024-04-27 03:44:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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("OK\n"))

更新:

我试图更好地解释情况:

从一个android设备(客户端)我从相机中捕捉到continuos帧,我需要对其进行后期处理以进行机器学习。 设备捕获的每个帧都将被发送到python服务器(上面的代码)。在客户端(智能手机)发送下一帧之前,我必须确保前一帧已保存到磁盘(计算机硬盘)。事实上,这条线连接发送(str.encode编码(“好的\n”))需要对客户说“好的,我保存了图像,你可以给我发送下一个”。但是在清理包含实际图像的数据变量之前,我必须确保f.write()已经完成。你知道吗


Tags: 图像服务器datadatetimedatestringwith数组
1条回答
网友
1楼 · 发布于 2024-04-27 03:44:30

在检查了documentation之后,您似乎不应该检查数据的大小,而是应该追加数据,直到不再接收数据为止:

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("OK\n"))
    else:
        break

date_string = str(datetime.datetime.now().timestamp()).replace('.', '')
with open('./images/' + date_string + '.jpg', 'ab') as f:
    f.write(data)

也许中间有些包裹大小不一样,但不是最后一个包裹。 此外,这还有更多的优点,因为您不需要重置数据变量。你知道吗

相关问题 更多 >