Sentencias de impresión multiproceso de Python retrasadas hasta que todas las hebras completen la ejecución

Tengo una pieza de código a continuación que crea algunos hilos para realizar una tarea, que funciona perfectamente bien por sí misma. Sin embargo, me cuesta entender por qué las instrucciones de impresión a las que llamo en mi función no se ejecutan hasta que se completan todos los subprocesos y se llama a la instrucción de print 'finished' . Espero que sean llamados cuando el hilo se ejecute. ¿Hay alguna forma sencilla de lograr esto, y por qué funciona esto de esta manera en primer lugar?

 def func(param): time.sleep(.25) print param*2 if __name__ == '__main__': print 'starting execution' launchTime = time.clock() params = range(10) pool=multiprocessing.Pool(processes=100) #use N processes to download the data _=pool.map(func,params) print 'finished' 

Esto sucede debido al almacenamiento en búfer de stdout. Todavía puede vaciar los buffers:

 import sys print 'starting' sys.stdout.flush() 

Puede encontrar más información sobre este tema aquí y aquí .

Para Python 3 ahora puedes usar el parámetro flush así:

print('Your text', flush=True)