写入使用 python 接收的文件 UDP 字节



我正在开发一个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、交换或任何其他快速内存之间(取决于您的特定硬件和操作系统(。然后将数据(缓慢地(复制到后台的硬盘驱动器。这允许看似快速的磁盘写入,但只有在有可用缓存空间的情况下才能工作。

也许您的系统有 ~2GB 的可用写入缓存,一旦填满,您的写入速度就会受限于原始磁盘写入速度。 30MB/s 对于 HDD 来说不是很好,但它仍然可以连贯。

如果这确实是问题所在,解决方案是升级硬件。您可以添加 SSD 以将此文件写入吗? 否则,您也可以在写入之前压缩数据。这将减少您必须编写的数量,从而解决(或至少减少(您当前的问题,但它会产生随之而来的处理能力使用成本。

最新更新