import multiprocessing as mp
def f(a, i):
a[i] += 1
if __name__ == "__main__":
N = 10
a = mp.Array('i', xrange(N), lock=False)
print "a =", [elt for elt in a]
jobs = [mp.Process(target=f, args=(a,i)) for i in xrange(N)]
for job in jobs:
job.start()
for job in jobs:
job.join()
print "a =", [elt for elt in a]
每次运行此代码时,都会得到预期的结果:
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
没有锁定同时写入a
是没关系的,因为写索引总是不同的,或者说不合适,而且恰巧,每个进程写入{{ 1}}在稍微不同的时间,产生正确的结果?
答案 0 :(得分:0)
我认为你应该考虑为此目的使用multiprocessing.Pool
s map
功能
您的代码将转换为类似
from multiprocessing import Pool
p = Pool(process=PROCESSCOUNT)
a = p.map(f, a))
它更清晰,在这种情况下,没有必要使用multiprocessing.Array
你可以使用常规的python列表