2010-12-16 62 views
1

我從正在生產約20 MB的專用設備讀取數據/秒值太大定義的數據類型

/dev/dvb/adapter0/dvr0 

我需要閱讀的內容,並複製到其他的FIFO

device_fd = os.open(video_device_file, os.O_RDONLY) 
    while True: 
     if jobm.has_jobs(): 
      chunk = os.read(device_fd, 1024 * 1000 ) 
      fifom.write2all(chunk) 
     jobm.idle() 

運行它爲整個晚上後,我收到以下錯誤:

[錯誤75]值過大,定義數據類型

在os.read行中。

從谷歌似乎是有關的C庫和32位指針,但我不知道這是如何影響我的Python版本是64位之一。

有什麼建議嗎?

+1

您的Python是否爲64位操作系統編譯? – nmichaels 2010-12-16 18:12:59

+2

http://www.google.com/search?q=eoverflow+dvb – 2010-12-16 18:15:08

+0

@nmichaels是的它是 @Ignacio +1好指針 – fabrizioM 2010-12-16 18:18:08

回答

1

我不知道你的jobm對象是什麼,我認爲它是由你創建的,因爲這是類似對象的唯一谷歌結果,所以如果我錯了,請糾正我。

您似乎正在打開視頻設備進行閱讀,視頻設備不斷生成視頻數據,而不是閱讀它,你是空轉。你似乎沒有將device_fd發送給你的工作,所以它不知道fd上是否有活動,所以它應該在你正在讀的時候睡覺,這會造成緩衝區溢出。

如果有任何可用的情況,您需要始終從device_fd讀取數據。將fd發送給作業,並使其利用pollselect來查找作業。

編輯:對不起,我錯過了你的問題的細節。我所說的仍然適用,但不是直接的 - 因爲我已經說過了,所以你需要注意你的輸入和輸出,不僅僅是你的輸出。

如果fifos無法處理輸出,並因此錯過了讀取設備的信息,則會出現問題。您需要1)創建一個緩衝區,以便在管道延遲寫入時保存高達幾百MB的數據,2)丟棄數據包。如果部分數據丟失,DVB應用程序應該處理它。您也可以簡單地捕捉並忽略異常,儘管它會導致輕微的損壞並在輸出中丟失數據。

相關問題