XIO:在 X 服务器 ":0" 235 个请求(235 个已知已处理)上出现致命 IO 错误 11(资源暂时不可用),剩余 0 个事件



是的,其他人以前也问过这个问题,但不是在同一背景下,也不是让我满意。所以,下面是::

我正在使用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(有时)是基于分叉的破解,因此当父代和子代都试图访问分叉套接字时,分叉套接字到底会发生什么……是随机混合垃圾。

EDIT:原因是两个分叉套接字仍然是套接字的"同一端",X服务器保持在"另一端"。当X服务器想要发送消息时,它会在套接字上写入100个字节。但如果运气不好,分叉进程1读取前50个字节,而分叉进程2读取剩余的50个字节。每个进程意外地只得到消息的随机部分。他们每个人都会抱怨X服务器发送的是胡说八道。

最新更新