multiproceso de las funciones de llamada pool.map en cierto orden

¿Cómo puedo hacer que multiprocessing.pool.map distribuya los procesos en orden numérico?

Más información:
Tengo un programa que procesa unos pocos miles de archivos de datos, haciendo una gráfica de cada uno. Estoy usando unmultiprocessing.pool.map Para distribuir cada archivo a un procesador y funciona muy bien. A veces esto lleva mucho tiempo, y sería bueno mirar las imágenes de salida mientras se ejecuta el programa. Esto sería mucho más fácil si el proceso del mapa distribuyera las instantáneas en orden; en cambio, para la ejecución en particular que acabo de ejecutar, las primeras 8 instantáneas analizadas fueron:0, 78, 156, 234, 312, 390, 468, 546. ¿Hay alguna manera de hacer que se distribuyan más estrechamente en orden numérico?

Ejemplo:
Aquí hay un código de muestra que contiene los mismos elementos clave y muestra el mismo resultado básico:

import sys
from multiprocessing import Pool
import time

num_proc  = 4; num_calls = 20; sleeper   = 0.1

def SomeFunc(arg):
    time.sleep(sleeper)
    print "%5d" % (arg),
    sys.stdout.flush()     # otherwise doesn't print properly on single line

proc_pool = Pool(num_proc)
proc_pool.map( SomeFunc, range(num_calls) )

Rendimientos:

   0  4  2  6   1   5   3   7   8  10  12  14  13  11   9  15  16  18  17  19
Responder:

Desde @Hayden: use el parámetro 'chunksize',def map(self, func, iterable, chunksize=None).

Más información:
loschunksize determina cuántas iteraciones se asignan a cada procesador a la vez. Mi ejemplo anterior, por ejemplo, utiliza un tamaño de trozo de 2 --- lo que significa que cada procesador se apaga y hace lo suyo por 2 iteraciones de la función, luego regresa por más ("check-in"). La compensación detrás del tamaño de los trozos es que hay una sobrecarga para el 'check-in' cuando el procesador tiene que sincronizarse con los otros --- sugiriendo que desea ungrandes trozos. Por otro lado, si tiene trozos grandes, entonces un procesador puede terminar su parte, mientras que a otro le queda mucho tiempo por delante, por lo que debe usar unpequeño trozo. Supongo que la información útil adicional es la cantidad de alcance, el tiempo que puede tomar cada llamada de función. Si realmente deberían tomar la misma cantidad de tiempo, es mucho más eficiente usar un tamaño de trozo grande. Por otro lado, si algunas llamadas de función pueden durar el doble que otras, usted desea un pequeño tamaño para que los procesadores no queden atrapados esperando.

Para mi problema, cada llamada a una función debería tomar casi la misma cantidad de tiempo (creo), así que si quiero que los procesos se procesen en orden, sacrificaré la eficiencia debido a los gastos generales de facturación.

Respuestas a la pregunta(2)

Su respuesta a la pregunta