python - 多处理共享变量

标签 python multiprocessing shared-variable

虽然这个问题看起来很重复,但我绝对不知道我做错了什么。

以下示例provided by Python docsmany others I have tried ,完全忽略目标函数变量设置。

我使用 Jupyter Notebook 和 Windows 在 Python 3.7.3 上运行它。但我在使用 Linux 时也遇到了同样的问题。

我不知道发生了什么,看起来有一些额外的配置,以便可以在进程之间共享状态。

from multiprocessing import Process, Value, Array

def f(n, a):
    n.value = 3.1415927
    for i in range(len(a)):
        a[i] = -a[i]

if __name__ == '__main__':
    num = Value('d', 0.0)
    arr = Array('i', range(10))

    p = Process(target=f, args=(num, arr))
    p.start()
    p.join()

    print(num.value)
    print(arr[:])


# Expected Return
# 3.1415927
# [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

# My Return
# 0.0
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

enter image description here

最佳答案

在交互式环境(即使用 Notebook)中工作时,您需要使用 ProcessPool 导入要调用的函数。

在同一文件夹中,创建文件 utils.py,在其中插入 f 函数,然后使用以下命令将其导入笔记本中:

from utils import f

此后您的流程应该运行良好。

完整代码:

util.py:

def f(n, a):
    n.value = 3.1415927
    for i in range(len(a)):
        a[i] = -a[i]

你的笔记本:

from multiprocessing import Process, Value, Array
from utils import f


if __name__ == '__main__':
    num = Value('d', 0.0)
    arr = Array('i', range(10))

    p = Process(target=f, args=(num, arr))
    p.start()
    p.join()

    print(num.value)
    print(arr[:])

关于python - 多处理共享变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57335943/

相关文章:

python - 如何用 OpenMP 编译 OpenCV

Nuke 中的 Python 多处理导致 Nuke 挂起

python - 为什么 Python 中的(守护进程)线程在使用进程池时会出现这种行为?

java - 为什么共享变量会缓存在CPU缓存中?

python - 多处理:如何在多个进程之间共享一个字典?

python - 使用 Dict 创建索引的更快代码

python - WTForms RadioField 默认值

python - numpy:以相反的顺序引用元素

c++ - openMP - 并发访问变量和原子