python - ProcessPoolExecutor 没有启动
问题描述
我正在使用 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 " 检查。我认为您在尝试使用无法腌制的 lambda 函数时遇到第二个问题,因为进程通过腌制数据进行通信。有解决方法,但在这种情况下,您似乎并不真的需要 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)
推荐阅读
- mysql - 如何在 MySQL 中压缩表?
- php - 从 WP 中的“添加媒体”中隐藏特定元素
- json - 使用 Django Restframework 获取 JSON 和 XML 响应
- django - Initializing drf Serializer
- python - 如何同时运行 2 个脚本 python?
- javascript - Javascript:尝试将多个通配符 id 拉入循环
- java - Android - 如何在不损失图像质量的情况下将位图图像从一个活动传递到另一个活动
- .net - 使用 NodaTime 解析包含 BST 和 GMT 的日期和时间字符串
- java - aD 输出的原因
- c++ - 如果用户输入 0 或更少,如何同时显示输出和结束程序