python - 如何在 python 中使用多处理?

标签 python multiprocessing

我正在尝试执行一项任务,我会将某些内容分配给列表。我会用多处理来做。所有任务完成后,我想总结一下。但是,我得到的并不是我所期望的。你知道为什么会这样吗?下面只是一个示例代码。结果应该是 45,而不是 0。

from multiprocessing import Process

def a(b):
    for i in range(10):
        b[i] = i

b = [0 for _ in range(10)]

p = Process(target=a, args=(b,))
p.start()
p.join()

print sum(b)

最佳答案

原因是因为列表 b 在一个单独的进程中发生了变异。当进程加入时,原始进程对 b 的变化一无所知。解决此问题的方法是让您的列表由 multiprocessing.Manager 管理。

from multiprocessing import Process,Manager

def a(b):
    for i in range(10):
        b[i] = i

b = [0 for _ in range(10)]

#create a manager to manage access to `b`
manager = Manager()
b = manager.list(b)

p = Process(target=a, args=(b,))
p.start()
p.join()

print sum(b)

关于python - 如何在 python 中使用多处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17044058/

相关文章:

python - Scipy 的优化曲线拟合限制

parallel-processing - MPI 程序的断言函数

python - 如果从函数内部执行,带有 "apply_async"的多处理池不会执行任何操作

python - Otsu 阈值 OpenCV Python

python - django 自定义登录 View 和 django 自定义身份验证后端之间的区别?

python - 工作池数据结构

python - 多处理中的 Pickle

python - 在子进程中的共享 c_wchar_p 中设置字符串值?

python - numpy.power() 和 math.pow() 不给出相同的结果

python - 如何使用后台线程关闭(在检测到按键时)运行循环的主线程?