簡體   English   中英

使用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,交換或任何其他快速內存之間分配(取決於您的特定硬件和操作系統)。 然后將數據在后台(緩慢地)復制到硬盤驅動器。 這允許看似快速的磁盤寫入,但是僅在有可用緩存空間的情況下才起作用。

也許您的系統具有〜2GB的可用寫入緩存,一旦填滿,您的寫入速度將受到原始磁盤寫入速度的限制。 30MB / s對於HDD來說不是很好,但是它仍然可以保持一致。

如果這實際上是問題所在,則解決方案是升級硬件。 您可以添加SSD將此文件寫入嗎? 否則,您也可以在寫入之前壓縮數據。 這將減少您必須編寫的數量,從而解決(或至少減少)您當前的問題,但是隨之而來的是處理功耗的成本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM