/ / python multiprocessing z oknami 2 gtk - python, gtk, multiprocessing

wieloprocesorowe pytony z 2 okienkami gtk - python, gtk, multiprocessing

Próbuję utworzyć skrypt Pythona, który używa modułu wieloprocesorowego do tworzenia 2 (lub więcej) okien GTK. Wydaje mi się, że uderzam w ścianę. Oto kod i błędy, które otrzymuję:

p1 = Process(target=tiny_gtk_process, name="process 1")
p1.start()
p2 = Process(target=tiny_gtk_process, name="process 2")
p2.start()

i:

def tiny_gtk_process():

import gtk

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

window.show_all()

gtk.main()

Przez większość czasu otrzymuję:

multiwin.py: Błąd krytyczny IO 0 (sukces) na serwerze X: 0.0. python: ../../src/xcb_io.c:249: process_responses: Assertion `(((long) (dpy-> last_request_read) - (długi) (dpy-> request)) <= 0)

Czasami dostaję:

multiwin.py: Błąd krytyczny IO 11 (Zasób chwilowo niedostępny) na serwerze X: 0.0.

Czy problem dotyczy pętli gtk? Czy proces wieloprocesorowy ich nie izoluje?

Wszelkie pomysły byłyby bardzo pomocne.

Odpowiedzi:

0 dla odpowiedzi № 1

Najprawdopodobniej używasz tego problemumultiprocessing.Process, który tworzy nowe procesy za pomocą fork () zamiast exec (). Oznacza to, że każdy podproces dzieli ten sam uchwyt pliku co jego rodzic, w tym te, które łączą go z serwerem X. Przyczyną awarii jest to, że wiele procesów próbuje jednocześnie komunikować się z serwerem w tym samym połączeniu.

Lepszym rozwiązaniem byłoby użycie subprocess.Popen lub podobnego, aby rozpocząć procesy. Jeśli chcesz komunikować się między procesami w sposób wieloprocesowy, zobacz moja odpowiedź na to pytanie.