Je souhaite ajouter une liste de dicts avec le module de multiprocesseur python.Problème de verrouillage multiprocesseur python
Voici une version simplifiée de mon code:
#!/usr/bin/python2.7
# -*- coding: utf-8 -*-
import multiprocessing
import functools
import time
def merge(lock, d1, d2):
time.sleep(5) # some time consuming stuffs
with lock:
for key in d2.keys():
if d1.has_key(key):
d1[key] += d2[key]
else:
d1[key] = d2[key]
l = [{ x % 10 : x } for x in range(10000)]
lock = multiprocessing.Lock()
d = multiprocessing.Manager().dict()
partial_merge = functools.partial(merge, d1 = d, lock = lock)
pool_size = multiprocessing.cpu_count()
pool = multiprocessing.Pool(processes = pool_size)
pool.map(partial_merge, l)
pool.close()
pool.join()
print d
Je reçois cette erreur lors de l'exécution de ce script. Comment dois-je résoudre cela?
RuntimeError: Lock objects should only be shared between processes through inheritance
est le
lock
en fonctionmerge
nécessaire dans cet état? ou python s'en occupera?Je pense que
map
supposé faire est de mapper quelque chose d'une liste à une autre liste, ne pas vider toutes les choses dans une liste à un seul objet. Alors, y a-t-il une façon plus élégante de faire de telles choses?