python多处理与2 gtk窗口

问题描述:

我想做一个python脚本,使用多处理模块来产生2(或更多)GTK窗口。看来,我在这里碰壁了。下面是代码,我得到的错误:python多处理与2 gtk窗口

p1 = Process(target=tiny_gtk_process, name="process 1") 
p1.start() 
p2 = Process(target=tiny_gtk_process, name="process 2") 
p2.start() 

和:

def tiny_gtk_process(): 

    import gtk 

    window = gtk.Window() 
    window.set_size_request(800,600) 

    window.show_all() 

    gtk.main() 

大部分我收到时间:

multiwin.py:致命IO错误0(成功)在X服务器上:0.0。 python:../../src/xcb_io.c:249:process_responses:断言`(((long)(dpy-> last_request_read) - (long)(dpy-> request))< = 0)'失败。

有时候我:

multiwin.py:0.0:致命错误IO 11 X服务器(资源暂时不可用)。

问题gtk循环?不是多处理隔离他们?

任何想法都会非常有帮助。

+0

你真的想要使用多进程,还是只想要2个窗口? – liberforce 2012-04-03 12:56:17

+0

我真的需要这是在不同的过程。 – 2012-04-03 13:11:53

+0

您是否正在调用脚本中导入gtk?当我在调用脚本中导入gtk时,我能够重现您的问题,但当我将其删除并且导入仅在tiny_gtk_process函数中时,我无法重现您的问题。 – bohrax 2012-05-26 19:24:54

问题很可能是您正在使用multiprocessing.Process,它使用fork()而不是exec()创建新进程。这意味着每个子进程与其父进程共享相同的文件句柄,包括将其连接到X服务器的文件句柄。导致崩溃的原因是多个进程试图通过同一连接同时与服务器通信。

更好的解决方案是使用subprocess.Popen或类似工具来启动您的流程。如果您希望进程之间的多处理类似的通信,请参阅my answer to this question