1

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

Python文档和我尝试过的许多其他示例提供的以下示例完全忽略了目标函数变量设置。

我正在使用 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]

在此处输入图像描述

4

1 回答 1

0

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

在同一个文件夹中,创建一个 utils.py 文件,将您的f函数插入其中,然后将其导入到您的笔记本中:

from utils import f

之后,您的流程应该可以正常运行。

整个代码:

实用程序.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[:])
于 2019-08-07T11:51:44.003 回答