在python中同时写入数组

时间:2016-12-20 20:40:56

标签: python parallel-processing multiprocessing python-multiprocessing

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}}在稍微不同的时间,产生正确的结果?

1 个答案:

答案 0 :(得分:0)

我认为你应该考虑为此目的使用multiprocessing.Pool s map功能 您的代码将转换为类似

的内容
from multiprocessing import Pool

p = Pool(process=PROCESSCOUNT)
a = p.map(f, a))

它更清晰,在这种情况下,没有必要使用multiprocessing.Array你可以使用常规的python列表