![](/img/trans.png)
[英]python: Fatal IO error 11 (Resource temporarily unavailable) on X server :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.