I want to add a list of dicts along with the python multiprocessing module.
Here is a simplified version of my 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
I get this error when running this script. How can i solve this?
RuntimeError: Lock objects should only be shared between processes through inheritance
is the lock
in merge
function needed in this condition? or will python take care of this?
I think that map
should do something from one list to another list, and not dump all things in one list to one object. So is there a more elegant way to do such things?
source share