我还在学习Python。对我而言,这段代码并不完全明显地显示“池映射”在https://docs.python.org上的确切工作方式:
from multiprocessing import Pool
def f(x):
return x*x
if __name__ == '__main__':
numb_list = [1, 22, 333]
with Pool(5) as p:
print(p.map(f, numb_list))
那么......它将列表[1,22,333]的每个索引分别插入到同一个函数的不同进程中,这些进程都运行在不同的核心上? 如果是这样,我如何确定某个迭代的细节? 示例,如果我编辑了该函数,因为我想知道列表中某个元素的长度[1,22,333]
def f(x):
if len(x) >= 3:
print("Big input")
return x*x
池是否一次将整个列表插入到运行该函数或列表部分的每个进程中?我可以通过这种方式检查元素输入的长度吗? 有没有办法可以使用for循环而不是map来区分当前正在输入哪个迭代或元素?
答案 0 :(得分:0)
它几乎等于:
from multiprocessing import Process
results = []
for item in numb_list:
process = Process(target=f, args=(item,))
process.start()
# insert process result in to results
map
将解压缩此可迭代参数并将每个项目发送到每个进程。