python多处理与2 gtk窗口

Str*_*lis 5 python gtk multiprocessing

我正在尝试制作一个使用多处理模块生成2个(或更多)GTK窗口的python脚本.我似乎在这里碰壁.这是代码和我得到的错误:

p1 = Process(target=tiny_gtk_process, name="process 1")
p1.start()
p2 = Process(target=tiny_gtk_process, name="process 2")
p2.start()
Run Code Online (Sandbox Code Playgroud)

和:

def tiny_gtk_process():

    import gtk

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

    window.show_all()

    gtk.main()
Run Code Online (Sandbox Code Playgroud)

大多数时候我得到:

multiwin.py:X服务器上的致命IO错误0(成功):0.0.蟒:../../src/xcb_io.c:249:process_responses:断言`(((长)(dpy-> last_request_read) - (长)(dpy->请求))<= 0)"失败.

有时我得到:

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

问题是gtk循环吗?多处理没有隔离它们吗?

任何想法都会非常有用.

Luk*_*uke 3

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

更好的解决方案是使用 subprocess.Popen 或类似的方法来启动进程。如果您希望进程之间进行类似多处理的通信,请参阅我对此问题的回答