Python 多处理空数组

Python Multiprocessing empty array

我只是在 Python 中尝试多处理,但我遇到了问题。

from multiprocessing import Process

w = 4;
arr = []

def func(num):
    for i in range(num,50,w):
        arr.append(i)

if __name__ == '__main__':
    p1 = Process(target=func, args=(1,))
    p1.start()
    p2 = Process(target=func, args=(2,))
    p2.start()
    p1.join()
    p2.join()

在 运行 代码之后,我得到 'arr' 数组的空值。

更新: 任何只想解决此类问题的人最好使用线程。

import threading

w = 4;
arr = []

def func(num):
    for i in range(num,50,w):
        arr.append(i)

if __name__ == '__main__':
    jobs = []
    jobs.append(threading.Thread(target=func, args=(1,)))
    jobs.append(threading.Thread(target=func, args=(2,)))
    jobs.append(threading.Thread(target=func, args=(3,)))
    for j in jobs:
        j.start()
    for j in jobs:
        j.join()

多处理使用 child 个进程,而不是线程。

您 pickle 了空数组 arr,将其发送到 1st child,然后将其丢弃。 然后你对第二个 child 过程做了同样的事情。

您需要进行一些 IPC 进程间通信才能使 children 与 parent 同步。 但这似乎是一个 XY 问题,您真正关心的问题比您描述的要复杂。 (我们 确实 感谢您为 提供 MRE!)

tl;dr:不,这种方法行不通,sub-processes 不是线程。


剧透预警:最简单最强大的方式 使用 multiprocessing 的结果看起来像这样:

    for result in pool( ... ):
        ...