2008-12-14 8 views
13

Tengo problemas con el módulo de multiprocesamiento de Python. Estoy usando la clase Process para generar un nuevo proceso para utilizar mi segundo núcleo. Este segundo proceso carga un montón de datos en la RAM y luego espera pacientemente en lugar de consumir.No hay salida de impresión desde el multiprocesamiento hijo. Proceda a menos que el programa falle

Quería ver qué se imprimía ese proceso con el comando print, sin embargo, no veo nada que se imprima. Solo veo lo que imprime el proceso principal. Ahora esto tiene sentido para mí, ya que viven en dos procesos diferentes. El segundo proceso no genera su propia ventana shell/output estándar, ni su salida se envía al padre. Sin embargo, cuando se bloquea este proceso, imprime todo lo que mi script le pidió que imprimiera, más el rastro de la pila y el error.

Me pregunto si hay una manera simple de enviar la salida de impresión del proceso hijo al primer proceso, o hacer que genere un shell/salida estándar para que pueda depurarlo. Sé que podría crear un multiprocessing.Queue dedicado a transmitir impresiones a la matriz para que pueda imprimirlas en la salida estándar, pero no tengo ganas de hacerlo si existe una solución más simple.

Respuesta

23

¿Has probado el lavado de stdout?

import sys 
print "foo" 
sys.stdout.flush() 
+0

awesome! Sí que realmente funcionó. ¿Qué hace este sys.stdout.flush()? ¿Obliga explícitamente a las impresiones a la salida estándar? ¡Thx otra vez! –

+1

Borra los búferes. Stdout se guarda hasta que tenga un buffer completo. Flush deja de esperar. Intenta imprimir en stderr para ver qué hace. A veces está sin búfer. –

+0

@Nicholas: no hay problema :) Cuando se ejecutan subprocesos, su salida estándar generalmente se almacena en el búfer (y su error estándar generalmente no es), S.Lott explicó lo que eso significa. Puede probar diferentes trucos para evitar el almacenamiento en búfer, pero recordar usar sys.stdout.flush() es simple y siempre funciona. – orip

Cuestiones relacionadas