簡體   English   中英

XIO:X服務器上的致命IO錯誤11(資源暫時不可用)在235個請求(235個已知處理)之后“0:0”,剩余0個事件

[英]XIO: fatal IO error 11 (Resource temporarily unavailable) on X server “:0” after 235 requests (235 known processed) with 0 events remaining

是的,其他人之前已經問過這個問題,但不是在相同的背景下或讓我滿意。 所以,這里::

我正在使用python編寫應用程序,該程序使用pygame(ergo opengl)來顯示圖形。 圖形是在程序本身中生成的(因此沒有任何目錄問題)。

應用程序還需要從用戶並行訪問輸入。 為了實現這一點,我使用帶管道的多處理塊,並使用pygame事件循環讀取輸入鍵。 下面的代碼循環運行。 第一次循環迭代工作正常,但在第二次迭代時,我拋出了XIO錯誤。

   parent, child = Pipe(duplex=True)
   # this function draws the canvas
   switches, retOrient = self.drawCanvas(cond, count, dispSize, moves)
   # this function gets the user input in another thread - stage 1
   p = Process(target=userInput, args=(self.button, child) )
   p.start()
   b_press = parent.recv()
   parent.close()

def userInput(button, child):
    button_pressed = button.blockAndWait()
    child.send( "%s"%(button_pressed.keyname) )
    child.close()

我對這個錯誤是如何發生有點困惑,XIO內部導致它的原因是什么。 其他答案都沒有解釋這個錯誤的根本原因。 考慮到它作為單個流程應用程序工作正常,多處理模塊正在關閉一些IO通道(輸入注冊對象,顯示對象或事件循環)或打開一些不必要的通道。 如何解讀導致此XIO錯誤的確切原因?

不一定是真正的答案,但我不會使用multiprocessing來並行訪問套接字,例如與X服務器的連接。 這看起來不錯。 請改用常規線程。

請注意, multiprocessing是基於分支(有時)基於分叉,因此當父項和子項嘗試訪問它時,分叉套接字究竟發生了什么......是隨機混合垃圾。

編輯:原因是兩個分叉套接字仍然是套接字的“同一端”,X服務器保持在“另一端”。 當X服務器想要發送消息時,它會在套接字上寫入100個字節。 但是如果你運氣不好,分叉進程1讀取前50個字節,分叉進程2讀取剩余的50個字節。 每個進程都意外地只獲得了消息的隨機部分。 他們每個人都會抱怨X服務器發送廢話。

暫無
暫無

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

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