ProcessPoolExecutor 没有启动

ProcessPoolExecutor does not start

我正在使用 Jupyter 笔记本工作。我是 python 中的多处理新手,我正在尝试并行计算参数网格的函数。这是一段非常能代表我正在做的事情的代码:

import os
import numpy as np
from concurrent.futures import ProcessPoolExecutor

def f(x,y):
    print(os.getpid(), x,y,x+y)
    return x+y

xs = np.linspace(5,7,3).astype(int)
ys = np.linspace(1,3,3).astype(int)

func = lambda p: f(*p)
with ProcessPoolExecutor() as executor:
    args = (arg for arg in zip(xs,ys))
    results = executor.map(func, args)
    
for res in results:
    print(res)

执行器甚至没有启动。

如果我连续执行相同的操作,没有任何问题,例如列表理解,

args = (arg for arg in zip(xs,ys))
results = [func(arg) for arg in args]

你 运行 在 Windows 吗?我认为你的主要问题是每个进程都试图重新执行你的整个脚本,所以你应该包括一个 if name == "main “ 查看。我认为您在尝试使用无法 pickle 的 lambda 函数时遇到了第二个问题,因为进程通过 pickle 数据进行通信。有一些解决方法,但在这种情况下,您似乎并不真正需要 lambda。尝试这样的事情:

import os
import numpy as np
from concurrent.futures import ProcessPoolExecutor


def f(x, y):
    print(os.getpid(), x, y, x + y)
    return x + y

if __name__ == '__main__':

    xs = np.linspace(5, 7, 3).astype(int)
    ys = np.linspace(1, 3, 3).astype(int)

    with ProcessPoolExecutor() as executor:
        results = executor.map(f, xs, ys)

    for res in results:
        print(res)