2012-04-03 14 views
5

के साथ पायथन मल्टीप्रोसेसिंग मैं एक पाइथन स्क्रिप्ट बनाने की कोशिश कर रहा हूं जो 2 (या अधिक) जीटीके विंडोज़ बनाने के लिए मल्टीप्रोसेसिंग मॉड्यूल का उपयोग करता है। मैं यहां एक दीवार मार रहा हूँ ऐसा लगता है।2 gtk windows

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: घातक आईओ त्रुटि 0 (सफलता) एक्स सर्वर पर: 0.0। पायथन: ../../src/xcb_io.c3949: process_responses: दावा '(((लंबा) (dpy-> last_request_read) - (लंबा) (dpy-> अनुरोध)) < = 0)' असफल रहा।

कभी कभी मैं मिलता है:

multiwin.py: घातक आईओ त्रुटि 11 (संसाधन अस्थायी रूप से अनुपलब्ध) एक्स सर्वर पर: 0.0।

क्या यह मुद्दा gtk लूप है? मल्टीप्रोसेसिंग उन्हें अलग नहीं करता है?

कोई भी विचार बहुत उपयोगी होगा।

+0

क्या आप वास्तव में मल्टीप्रोसेस का उपयोग करना चाहते हैं, या आप सिर्फ 2 विंडोज़ चाहते हैं? – liberforce

+0

मुझे वास्तव में अलग प्रक्रियाओं में रहने की आवश्यकता है। –

+0

क्या आप कॉलिंग स्क्रिप्ट में gtk आयात कर रहे हैं? जब मैं कॉलिंग स्क्रिप्ट में एक आयात gtk था, तो मैं आपकी समस्या को पुन: उत्पन्न करने में सक्षम था, लेकिन जब मैंने इसे हटाया और आयात केवल tiny_gtk_process फ़ंक्शन में नहीं था। – bohrax

उत्तर

0

समस्या यह है कि आप multiprocessing.Process का उपयोग कर रहे हैं, जो exec() के बजाय कांटा() का उपयोग कर नई प्रक्रियाएं बनाता है। इसका अर्थ यह है कि प्रत्येक उप-प्रक्रिया उसी फ़ाइल को अपने माता-पिता के रूप में प्रबंधित करती है, जिसमें एक्स सर्वर से कनेक्ट होते हैं। क्रैश इसलिए होता है क्योंकि एकाधिक प्रक्रियाएं एक ही कनेक्शन पर सर्वर के साथ संवाद करने की कोशिश कर रही हैं।

एक बेहतर समाधान subprocess.Popen का उपयोग करना होगा या अपनी प्रक्रियाओं को शुरू करने के समान होगा। यदि आप अपनी प्रक्रियाओं के बीच मल्टीप्रोसेसिंग-जैसे संचार चाहते हैं, तो my answer to this question देखें।