簡體   English   中英

使用QTimer在Python中流式傳輸大型數據文件

[英]Using QTimer for Streaming Large Data File in Python

我首先要說的是我有有效的代碼...但這並不能使它成為理想的代碼,這就是為什么我要由社區來使用我的方法。 我正在嘗試以“ QT方式”執行此操作,這迫使我沿着通常不去的路走。

我有一些包含原始時變數據的400 + mb二進制文件。 我需要將此數據繪制給用戶,以便數據回放與記錄的持續時間匹配。 我有一個使用QTimer.timeout觸發文件讀取的有效方法。 我讀取了x個字節,讀取完成后,我發出一個信號來觸發繪圖操作。 通過調整超時時間,我可以控制繪圖速度而不會阻塞我的界面(不阻塞GUI是關鍵)。 這似乎可行,但是對於像file.read這樣簡單的事情,感覺卻過於復雜。

當我通過TCP在流中接收數據時,可以使用socket.readReady信號告訴我何時處理數據。 由於數據是按時間順序到達的,因此自然看起來就在TCP流上。

我基本上通過使用fread並發出信號來復制套接字的readReady。 這聽起來像是一種合理的方法嗎?

另一種可能是繪圖緩沖區比您需要顯示的緩沖區要大一些。 如果它缺少值,則將其填滿。 如果您在線程中執行此操作,則可以確保數據可用性而無需計時器或讀取就緒信號。 您只需要跟蹤已讀取的數據以及及時的方向即可。

另一種選擇是使用QFile :: map()函數將正確的數據切片映射到內存中以直接訪問而無需讀取任何文件。 我想這應該足夠快以便根據切片大小快速顯示。 可以將這種方法與上面的緩沖區方法結合起來,以避免過多的映射。 這將意味着映射比當前需要更大的切片。

暫無
暫無

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

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