多处理结果列表
multiprocessing result to list
我想将我的多处理结果放到 2 个列表中,我该怎么做。我在下面试过,但只得到最后一个列表。
def multiply(x, y):
return x * x, x * y
#use wrap
def multiply_wrapper(args):
return multiply(*args)
#use wrap
if __name__ == "__main__":
list_x = []
list_y = []
p = Pool(4)
values = [(x, y) for x in range(4) for y in range(4)]
results = p.map(multiply_wrapper, values)
list_x.append(results[0][0])
list_y.append(results[0][1])
print(list_x)
print(list_y)
我尝试了您的代码并做了一些小改动,results
看起来不错。
您是否可能希望多处理根据哪个工作人员处理数据块来分隔数据?幸运的是,它为我们加入了数据。
以下灵感来自 docs 和您的原始问题。另外不要忘记释放资源,因为垃圾收集器不会为您做这件事。
from multiprocessing.pool import Pool
import pprint
def multiply(x, y):
return x * x, x * y
#use wrap
def multiply_wrapper(args):
return multiply(*args)
#use wrap
if __name__ == "__main__":
p = Pool(4)
values = [(x, y) for x in range(4) for y in range(4)]
results = p.map(multiply_wrapper, values)
p.close()
p.join()
pprint.pprint(results)
输出:
[(0, 0),
(0, 0),
(0, 0),
(0, 0),
(1, 0),
(1, 1),
(1, 2),
(1, 3),
(4, 0),
(4, 2),
(4, 4),
(4, 6),
(9, 0),
(9, 3),
(9, 6),
(9, 9)]
回复评论:
要从 Pool.map
的输出中获得 2 个列表,我们可以解压缩结果。
if __name__ == "__main__":
p = Pool(4)
values = [(x, y) for x in range(4) for y in range(4)]
results = p.map(multiply_wrapper, values)
p.close()
p.join()
list_x = [x[0] for x in results]
list_y = [x[1] for x in results]
pprint.pprint(list_x)
pprint.pprint(list_y)
输出:
[0, 0, 0, 0, 1, 1, 1, 1, 4, 4, 4, 4, 9, 9, 9, 9]
[0, 0, 0, 0, 0, 1, 2, 3, 0, 2, 4, 6, 0, 3, 6, 9]
我想将我的多处理结果放到 2 个列表中,我该怎么做。我在下面试过,但只得到最后一个列表。
def multiply(x, y):
return x * x, x * y
#use wrap
def multiply_wrapper(args):
return multiply(*args)
#use wrap
if __name__ == "__main__":
list_x = []
list_y = []
p = Pool(4)
values = [(x, y) for x in range(4) for y in range(4)]
results = p.map(multiply_wrapper, values)
list_x.append(results[0][0])
list_y.append(results[0][1])
print(list_x)
print(list_y)
我尝试了您的代码并做了一些小改动,results
看起来不错。
您是否可能希望多处理根据哪个工作人员处理数据块来分隔数据?幸运的是,它为我们加入了数据。
以下灵感来自 docs 和您的原始问题。另外不要忘记释放资源,因为垃圾收集器不会为您做这件事。
from multiprocessing.pool import Pool
import pprint
def multiply(x, y):
return x * x, x * y
#use wrap
def multiply_wrapper(args):
return multiply(*args)
#use wrap
if __name__ == "__main__":
p = Pool(4)
values = [(x, y) for x in range(4) for y in range(4)]
results = p.map(multiply_wrapper, values)
p.close()
p.join()
pprint.pprint(results)
输出:
[(0, 0),
(0, 0),
(0, 0),
(0, 0),
(1, 0),
(1, 1),
(1, 2),
(1, 3),
(4, 0),
(4, 2),
(4, 4),
(4, 6),
(9, 0),
(9, 3),
(9, 6),
(9, 9)]
回复评论:
要从 Pool.map
的输出中获得 2 个列表,我们可以解压缩结果。
if __name__ == "__main__":
p = Pool(4)
values = [(x, y) for x in range(4) for y in range(4)]
results = p.map(multiply_wrapper, values)
p.close()
p.join()
list_x = [x[0] for x in results]
list_y = [x[1] for x in results]
pprint.pprint(list_x)
pprint.pprint(list_y)
输出:
[0, 0, 0, 0, 1, 1, 1, 1, 4, 4, 4, 4, 9, 9, 9, 9]
[0, 0, 0, 0, 0, 1, 2, 3, 0, 2, 4, 6, 0, 3, 6, 9]