繁体   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