2014-04-07 18 views
0

我試圖實現一個ramdump PC程序,可以從智能手機獲取所有RAM數據。 我的代碼最終能夠正常工作,但由於文件寫入速度很慢。如何提高Python中的文件寫入速度?如何提高將串行數據保存到Python文件的速度

這是我的代碼部分,用於接收串行數據:

while recv_num < tot_num: 
    remain_num = tot_num - recv_num 
    for i in range(512): 
     data = receive_qword() # result=ser.read(size=8) 
     f.write(data) 
    recv_num = recv_num + 512 

我已經寫在C ramdump程序,我工作的這個轉換到Python。在我的C代碼中,函數f_write(fil,ptr,size * count,& bwrite)的工作很快,似乎像散裝蒸汽一樣運行。

在Python中是否存在與C機制等價的機制?

+0

你怎麼知道該程序由於文件寫入緩慢?你有分析過嗎? – user4815162342

+0

非常好的問題。在資源管理器中,通過按F5鍵刷新轉儲文件,發現文件的大小與C程序相比成長很小。這意味着python程序有比C更多的文件寫入時間,所以我在C中檢查了f_write函數。它可以在不分開的時間立即在文件中寫入數據。 – redreamer

+0

C的'fwrite'和Python的'file.write'緩衝輸出數據。我希望你的緩慢來自小塊閱讀和創造大量的小字符串。 – user4815162342

回答

-1

試試這個

import array 

while recv_num<tot_num: 
remain_num=tot_num-recv_num 
buffer = bytearray() 
for i in range(512): 
    buffer.extend(receive_qword()) # result=ser.read(size=8) 
f.write(buffer) #yep, after the loop. 
recv_num = recv_num + 512 

而且你確定你需要在8包讀?爲什麼不是ser.read(512)

+0

謝謝。我不知道數組模塊。在你指導的情況下。它工作得很好。並且我還測試了關於ser.read(512)(512x8 - > 8x512)的提示。大概它應該被多次測試,但它也工作!非常感謝 – redreamer

+0

'bytearray'和'array'是不同的東西,儘管兩者都很整齊。 'array'將您的數據視爲可能導致它們「稍微」被改變的數字。不要將它用於二進制數據。 bytearray不再是我已經忘記的'array'。 –