2012-04-03 63 views
5

我想做一個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

回答

0

問題很可能是您正在使用multiprocessing.Process,它使用fork()而不是exec()創建新進程。這意味着每個子進程與其父進程共享相同的文件句柄,包括將其連接到X服務器的文件句柄。導致崩潰的原因是多個進程試圖通過同一連接同時與服務器通信。

更好的解決方案是使用subprocess.Popen或類似工具來啓動您的流程。如果您希望進程之間的多處理類似的通信,請參閱my answer to this question