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循环?不是多处理隔离他们?
任何想法都会非常有帮助。
答
问题很可能是您正在使用multiprocessing.Process,它使用fork()而不是exec()创建新进程。这意味着每个子进程与其父进程共享相同的文件句柄,包括将其连接到X服务器的文件句柄。导致崩溃的原因是多个进程试图通过同一连接同时与服务器通信。
更好的解决方案是使用subprocess.Popen或类似工具来启动您的流程。如果您希望进程之间的多处理类似的通信,请参阅my answer to this question。
你真的想要使用多进程,还是只想要2个窗口? – liberforce 2012-04-03 12:56:17
我真的需要这是在不同的过程。 – 2012-04-03 13:11:53
您是否正在调用脚本中导入gtk?当我在调用脚本中导入gtk时,我能够重现您的问题,但当我将其删除并且导入仅在tiny_gtk_process函数中时,我无法重现您的问题。 – bohrax 2012-05-26 19:24:54