2012-04-03 11 views
5

Ich versuche, ein Python-Skript, das das Multiprocessing-Modul verwendet, um 2 (oder mehr) GTK-Fenster zu erstellen. Ich treffe hier eine Wand. Hier ist der Code und die Fehler Ich erhalte:Python Multiprocessing mit 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() 

und:

def tiny_gtk_process(): 

    import gtk 

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

    window.show_all() 

    gtk.main() 

Die meiste Zeit bin ich immer:

multiwin.py: Fatal IO Fehler 0 (Erfolg) auf X-Server: 0.0. python: ../../src/xcb_io.c:249: process_responses: Assertion `(((lang) (dpy-> last_request_read) - (lang) (dpy-> request)) < = 0) 'fehlgeschlagen.

Manchmal habe ich:

multiwin.py: Fatal IO Fehler 11 (Resource vorübergehend nicht verfügbar) auf X-Server: 0.0.

Ist das Problem die GTK-Schleife? Multiprocessing nicht isoliert sie?

Alle Ideen wären sehr hilfreich.

+0

Möchten Sie wirklich Multiprozess verwenden, oder möchten Sie nur 2 Fenster haben? – liberforce

+0

Ich brauche das wirklich in getrennten Prozessen. –

+0

Importieren Sie GTK in das aufrufende Skript? Ich war in der Lage, Ihr Problem zu reproduzieren, wenn ich einen Import-GTK im aufrufenden Skript hatte, aber nicht, wenn ich es entfernte und der Import nur in der tiny_gtk_process -Funktion ist. – bohrax

Antwort

0

Das Problem ist höchstwahrscheinlich, dass Sie multiprocessing.Process verwenden, das neue Prozesse mit fork() anstelle von exec() erstellt. Dies bedeutet, dass jeder Unterprozess dieselben Dateizugriffsnummern wie sein Elternteil gemeinsam nutzt, einschließlich derjenigen, die ihn mit dem X-Server verbinden. Der Absturz wird verursacht, weil mehrere Prozesse versuchen, über dieselbe Verbindung gleichzeitig mit dem Server zu kommunizieren.

Eine bessere Lösung wäre die Verwendung von subprocess.Popen oder ähnlichem, um Ihre Prozesse zu starten. Wenn Sie eine multiprocessing-ähnliche Kommunikation zwischen Ihren Prozessen wünschen, lesen Sie my answer to this question.