Lista adjunta de multiprocesamiento de Python

Tenga una pregunta rápida sobre una variable compartida entre varios procesos utilizando Multiprocessing.Pool ().

¿Me encontraré con algún problema si actualizo una lista global desde varios procesos? Es decir, si dos de los procesos intentaran actualizar la lista al mismo tiempo.

He visto documentación sobre el uso de un candado para cosas similares, pero me preguntaba si era necesario.

EDITAR:

La forma en que comparto esta variable es mediante el uso de una variable global en mi función de callback, “éxitos” en los que adjunto todas las acciones exitosas después de que la función de destino se haya completado:

TOTAL_SUCCESSES = [] def func(inputs): successes = [] for input in inputs: result = #something with return code if result == 0: successes.append(input) return successes def callback(successes): global TOTAL_SUCCESSES for entry in successes: TOTAL_SUCCESSES.append(entry) def main(): pool = mp.Pool() for entry in myInputs: pool.apply_async(func, args=(entry,),callback=callback) 

Discúlpese por cualquier error de syntax, escribí esto rápidamente, pero el progtwig está funcionando, solo me pregunto si agrego la variable compartida si tendré problemas.

¡Gracias por adelantado!

Con su código actual, en realidad no está compartiendo CURRENT_SUCCESSES entre procesos. callback se ejecuta en el proceso principal, en un subproceso de manejo de resultados. Solo hay un subproceso de manejo de resultados, por lo que cada callback se ejecutará una a la vez, no simultáneamente. Así que su código como está escrito es seguro para procesos / hilos.

Sin embargo, está olvidando devolver los successes de func , que querrá arreglar.

Editar:

Además, esto podría ser mucho más sucintamente escrito usando el map :

 def func(inputs): successes = [] for input in inputs: result = #something with return code if result == 0: successes.append(input) return successes def main(): pool = mp.Pool() total_successes = pool.map(func, myInputs) # Returns a list of lists # Flatten the list of lists total_successes = [ent for sublist in total_successes for ent in sublist]