如何在多处理中访问共享资源?

时间:2020-10-23 16:35:47

标签: python multiprocessing

我正在尝试为每个列表创建一个进程并运行功能。该函数会将数据写入公共资源。但是,由于赛车,我无法获得正确的结果吗? (idk)。

这是我的代码:

import multiprocessing
from multiprocessing import Manager

a = [1, 2, 3, 4]

chunks = [a[i::2] for i in range(2)]


def find_neighbor(list, b, i):
    n = []
    for i in range(len(list)):
        ad = []
        for j in range(len(a)):
            if (list[i] + a[j]) % 2 == 1:
                ad.append(a[j])
        n.append(ad)
    b[i] = n


if __name__ == "__main__":
    b = Manager().dict()
    jobs = []
    for i in range(2):
        p = multiprocessing.Process(target=find_neighbor, args=(chunks[i], b, i))
        jobs.append(p)
        p.start()
    for p in jobs:
        p.join()
    print(b)

我得到的结果是

{1: [[1, 3], [1, 3]]}

两个进程中只有一个成功写入数据。我期望的是

{0:[[2, 4], [2, 4]],1: [[1, 3], [1, 3]]}

0 个答案:

没有答案