Intenté leer la documentación en http://docs.python.org/dev/library/multiprocessing.html pero todavía estoy luchando con el multiprocesamiento de cola, agrupación y bloqueo. Y por ahora pude construir el siguiente ejemplo.
Con respecto a la cola y la agrupación, no estoy seguro de haber entendido el concepto correctamente, así que corrígeme si me equivoco. Lo que estoy tratando de lograr es procesar 2 solicitudes a la vez (la lista de datos tiene 8 en este ejemplo), entonces, ¿qué debo usar? Pool para crear 2 procesos que pueden manejar dos colas diferentes (2 como máximo) o debería usar Queue para procesar 2 entradas cada vez? El bloqueo sería imprimir las salidas correctamente.
import multiprocessing
import time
data = (['a', '2'], ['b', '4'], ['c', '6'], ['d', '8'],
['e', '1'], ['f', '3'], ['g', '5'], ['h', '7']
)
def mp_handler(var1):
for indata in var1:
p = multiprocessing.Process(target=mp_worker, args=(indata[0], indata[1]))
p.start()
def mp_worker(inputs, the_time):
print " Processs %s\tWaiting %s seconds" % (inputs, the_time)
time.sleep(int(the_time))
print " Process %s\tDONE" % inputs
if __name__ == '__main__':
mp_handler(data)
fuente
var1
completo, refiriéndome a global en sudata
lugar.Esto puede no estar 100% relacionado con la pregunta, pero en mi búsqueda de un ejemplo de uso de multiprocesamiento con una cola, esto aparece primero en Google.
Esta es una clase de ejemplo básica que puede crear instancias y poner elementos en una cola y puede esperar hasta que la cola finalice. Eso es todo lo que necesitaba.
fuente
item1
yitem2
? ¿Son algún tipo de tarea o funciones que se ejecutarán en dos procesos diferentes?Aquí está mi goto personal para este tema:
Gist aquí, (¡solicitudes de extracción son bienvenidas!): Https://gist.github.com/thorsummoner/b5b1dfcff7e7fdd334ec
fuente
get()
es un tiempo de espera, no tiene nada que ver con la cantidad de trabajos que se inician..get(timeout=1)
? y ¿está bien decir simplemente.get()
para obtener la lista completa?.get()
espera indefinidamente hasta que todos los resultados estén disponibles y devuelve la lista de resultados. Puede usar un ciclo de sondeo para verificar que los resultados del clima estén disponibles, o puede pasar una función de devolución de llamada en lamap_async()
llamada que luego se invocará para cada resultado una vez que esté disponible.Para todos los que usan editores como Komodo Edit (win10), agregue
sys.stdout.flush()
a:o como primera línea para:
Esto ayuda a ver lo que sucede durante la ejecución del script; en lugar de tener que mirar el cuadro de línea de comando negro.
fuente
Aquí hay un ejemplo de mi código (para el grupo de subprocesos, pero simplemente cambie el nombre de la clase y tendrá el grupo de procesos):
Básicamente:
pool = ThreadPoolExecutor(6)
crea un grupo de 6 hilospool.submit(execute_run, rp)
agrega una tarea al grupo, el primer argumento es una función llamada en un hilo / proceso, el resto de los argumentos se pasan a la función llamada.pool.join
espera hasta que se completen todas las tareas.fuente
concurrent.futures
, pero el OP está preguntando sobremultiprocessing
y Python 2.7.