Creo que estoy siguiendo correctamente la documentación de python, pero estoy teniendo problemas para obtener el resultado que estoy buscando. Básicamente, tengo una lista de números, que se pasan a una función de anidados para bucles y la salida se guarda en un diccionario.¿Cómo puedo acceder a un diccionario compartido con multiprocesamiento?
Aquí está el código:
from multiprocessing import Pool, Manager
list = [1,2,3,10]
dictionary = {}
def test(x, dictionary):
for xx in range(100):
for xxx in range(100):
dictionary[x]=xx*xxx
if __name__ == '__main__':
pool = Pool(processes=4)
mgr = Manager()
d = mgr.dict()
for N in list:
pool.apply_async(test, (N, d))
# Mark pool as closed -- no more tasks can be added.
pool.close()
# Wait for tasks to exit
pool.join()
# Output results
print d
Aquí está el resultado esperado:
{1: 9801, 2: 9801, 3: 9801, 10: 9801}
Cualquier sugerencia de lo que estoy haciendo mal? Además, no me he convencido a mí mismo de que los recursos compartidos sean el mejor enfoque (pensando en usar una base de datos para mantener el estado) así que si mi enfoque es completamente erróneo o hay una mejor manera de hacerlo en Python, por favor avíseme.
Gracias, no puedo creer que haya cometido un error tan simple. Gracias. En cuanto al enfoque general. Mi código real básicamente necesita referirse a elementos dict existentes y si no existe para crearlo (y si existe para procesarlo dentro del nuevo bucle). Lotearlo no funcionaría específicamente para mí, pero es bueno saber acerca de ese enfoque. Estaba pensando en una base de datos (o almacenando los resultados en un archivo) pero no estaba seguro. – Lostsoul