2012-04-03 13 views
5

Estoy tratando de hacer una secuencia de comandos python que utiliza el módulo de multiprocesamiento para producir 2 (o más) ventanas GTK. Estoy golpeando una pared aquí parece. Aquí está el código y los errores que estoy recibiendo:multiprocesamiento python con 2 ventanas GTK

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

y:

def tiny_gtk_process(): 

    import gtk 

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

    window.show_all() 

    gtk.main() 

mayor parte del tiempo estoy recibiendo:

multiwin.py: Fatal error IO 0 (Éxito) en el servidor X: 0.0. python: ../../src/xcb_io.c:249: process_responses: Assertion `(((long) (dpy-> last_request_read) - (long) (dpy-> request)) < = 0) 'failed.

A veces me sale:

multiwin.py: Fatal error IO 11 (Recurso temporalmente no disponible) en el servidor X: 0.0.

¿El problema es el bucle gtk? ¿El multiprocesamiento no los aísla?

Cualquier idea sería muy útil.

+0

¿Realmente desea usar multiprocesamiento, o simplemente desea tener 2 ventanas? – liberforce

+0

Realmente necesito que esto esté en procesos separados. –

+0

¿Está importando gtk en el script de llamada? Pude reproducir su problema cuando tenía un gtk de importación en el script de llamada, pero no cuando lo quité y la importación solo está en la función tiny_gtk_process. – bohrax

Respuesta

0

El problema es muy probable que esté utilizando multiprocesamiento.Proceso, que crea nuevos procesos utilizando fork() en lugar de exec(). Esto significa que cada subproceso comparte los mismos identificadores de archivo que su principal, incluidos los que lo conectan al servidor X. El bloqueo se debe a que varios procesos intentan comunicarse con el servidor simultáneamente a través de la misma conexión.

Una mejor solución sería usar subproceso.Popen o similar para iniciar sus procesos. Si desea una comunicación de tipo multiprocesamiento entre sus procesos, consulte my answer to this question.

Cuestiones relacionadas