写入 python 收到的文件 UDP 字节
Write on File UDP bytes received with python
我正在开发一个 python 程序,它可以让我与 FPGA 通信,通过 UDP 以大约 109 MB/s 的速度向我发送数据包。我现在有一个问题,我愿意解决:
FPGA 每个数据包(二进制)向我发送 1400 字节,我想将它们保存在一个文件中。现在这部分代码看起来像这样(它是多进程实例调用的函数):
filio = open('pack.bin',"wb")
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.bind(('',int(udportr.get())))
start = "Starting..."
q.send(start)
t = Timer(1, lambda:q.send(a))
t.start()
a = 0
while True:
data, addr = sock.recvfrom(1400)
if checksave.get() == 1:
filio.write(data)
if t.is_alive():
a +=1
else:
start_time = time.time()
print a
t = Timer(1, lambda:q.send(a)) # q refers to a Pipe
t.start()
a = 0
sock.close()
问题是,当我在大约 2 GB 后打开写入文件时,速度减慢很多,达到 30 MB/s。只有当我试图保存在文件中时才会发生这种情况,否则速率将保持在 ~ 109 MB/s 不变。
有什么建议吗?
2GB 阈值可能暗示存在硬件问题。你运行这个节目是什么?
写入文件时,数据通常不会直接写入硬盘,而是写入缓存。这可以分布在 HDD 缓存、RAM、Swap 或任何其他快速内存之间(取决于您的特定硬件和 OS)。然后在后台将数据(缓慢地)复制到硬盘。这允许 看似 快速磁盘写入,但只有在有空闲缓存 space.
时才有效
也许您的系统有大约 2GB 的可用写入缓存,一旦它被填满,您的写入速度将受限于您的原始磁盘写入速度。 30MB/s 对于 HDD 来说不是很好,但它仍然可以连贯。
如果这确实是问题所在,解决方案是升级您的硬件。你可以添加一个 SSD 来写入这个文件吗?
否则,您也可以在写入之前压缩数据。这将减少您必须编写的数量,从而解决(或至少减少)您当前的问题,但随之而来的是处理能力的使用成本。
我正在开发一个 python 程序,它可以让我与 FPGA 通信,通过 UDP 以大约 109 MB/s 的速度向我发送数据包。我现在有一个问题,我愿意解决:
FPGA 每个数据包(二进制)向我发送 1400 字节,我想将它们保存在一个文件中。现在这部分代码看起来像这样(它是多进程实例调用的函数):
filio = open('pack.bin',"wb")
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.bind(('',int(udportr.get())))
start = "Starting..."
q.send(start)
t = Timer(1, lambda:q.send(a))
t.start()
a = 0
while True:
data, addr = sock.recvfrom(1400)
if checksave.get() == 1:
filio.write(data)
if t.is_alive():
a +=1
else:
start_time = time.time()
print a
t = Timer(1, lambda:q.send(a)) # q refers to a Pipe
t.start()
a = 0
sock.close()
问题是,当我在大约 2 GB 后打开写入文件时,速度减慢很多,达到 30 MB/s。只有当我试图保存在文件中时才会发生这种情况,否则速率将保持在 ~ 109 MB/s 不变。 有什么建议吗?
2GB 阈值可能暗示存在硬件问题。你运行这个节目是什么?
写入文件时,数据通常不会直接写入硬盘,而是写入缓存。这可以分布在 HDD 缓存、RAM、Swap 或任何其他快速内存之间(取决于您的特定硬件和 OS)。然后在后台将数据(缓慢地)复制到硬盘。这允许 看似 快速磁盘写入,但只有在有空闲缓存 space.
时才有效也许您的系统有大约 2GB 的可用写入缓存,一旦它被填满,您的写入速度将受限于您的原始磁盘写入速度。 30MB/s 对于 HDD 来说不是很好,但它仍然可以连贯。
如果这确实是问题所在,解决方案是升级您的硬件。你可以添加一个 SSD 来写入这个文件吗? 否则,您也可以在写入之前压缩数据。这将减少您必须编写的数量,从而解决(或至少减少)您当前的问题,但随之而来的是处理能力的使用成本。