doprocessing.pool.map 是否擦除映射对象



当我将multiprocessing.pool.map应用于list对象时,list对象不会受到影响:

from multiprocessing import Pool
def identity(x):
    return x
num_list = list(range(0, 10))
print("before multiprocessing:")
with Pool(10) as p:
    print(p.map(identity, num_list))
print("after multiprocessing:")
print(list(num_list))

指纹

before multiprocessing:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
after multiprocessing:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

但是当我multiprocessing.pool.map应用于map对象时,它似乎被删除了:

from multiprocessing import Pool
def identity(x):
    return x
num_list = list(range(0, 10))
num_list = map(identity, num_list)
print("before multiprocessing:")
with Pool(10) as p:
    print(p.map(identity, num_list))
print("after multiprocessing:")
print(list(num_list))

指纹

before multiprocessing:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
after multiprocessing:
[]

唯一的区别是 num_list = map(identity, num_list) .

num_list(地图对象(被multiprocessing.pool.map擦除了吗?

我不确定这一点,但我找不到其他解释。

map函数返回一个iterator,在遍历map obj的最后一个元素后p.map()遍历后,再次访问map obj时将不返回任何内容。这是迭代器的功能

最新更新