pool.startmap_async() 的列表理解语法
List comprehension syntax for pool.startmap_async()
看这里的例子:
https://www.machinelearningplus.com/python/parallel-processing-python/
有一个要并行化的函数定义:
# Step 1: Redefine, to accept `i`, the iteration number
def howmany_within_range2(i, row, minimum, maximum):
"""Returns how many numbers lie within `maximum` and `minimum` in a given `row`"""
count = 0
for n in row:
if minimum <= n <= maximum:
count = count + 1
return (i, count)
starmap_async例子如下:
results = pool.starmap_async(howmany_within_range2, [(i, row, 4, 8) for i, row in enumerate(data)]).get()
我对这里的语法有点困惑,尤其是 "i" 参数以及枚举语法的工作原理。
此外 apply_asyncy() 示例使用 pool.join() 语句,但 map_async() 语句不使用一个?
稍微分解一下,
data = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
]
arguments = [(i, row, 4, 8) for i, row in enumerate(data)]
print(arguments)
输出(格式化)
[
(0, [1, 2, 3], 4, 8),
(1, [4, 5, 6], 4, 8),
(2, [7, 8, 9], 4, 8),
]
哪些是 howmany_within_range2
将被执行的元组,即
howmany_within_range2(0, [1, 2, 3], 4, 8)
howmany_within_range2(1, [4, 5, 6], 4, 8)
howmany_within_range2(2, [7, 8, 9], 4, 8)
但并行。
这里使用enumerate
方便访问data
列表中该行的行索引;否则你只会得到一堆结果,而没有一种简单的方法将它们与原始数据行相关联。
看这里的例子:
https://www.machinelearningplus.com/python/parallel-processing-python/
有一个要并行化的函数定义:
# Step 1: Redefine, to accept `i`, the iteration number
def howmany_within_range2(i, row, minimum, maximum):
"""Returns how many numbers lie within `maximum` and `minimum` in a given `row`"""
count = 0
for n in row:
if minimum <= n <= maximum:
count = count + 1
return (i, count)
starmap_async例子如下:
results = pool.starmap_async(howmany_within_range2, [(i, row, 4, 8) for i, row in enumerate(data)]).get()
我对这里的语法有点困惑,尤其是 "i" 参数以及枚举语法的工作原理。
此外 apply_asyncy() 示例使用 pool.join() 语句,但 map_async() 语句不使用一个?
稍微分解一下,
data = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
]
arguments = [(i, row, 4, 8) for i, row in enumerate(data)]
print(arguments)
输出(格式化)
[
(0, [1, 2, 3], 4, 8),
(1, [4, 5, 6], 4, 8),
(2, [7, 8, 9], 4, 8),
]
哪些是 howmany_within_range2
将被执行的元组,即
howmany_within_range2(0, [1, 2, 3], 4, 8)
howmany_within_range2(1, [4, 5, 6], 4, 8)
howmany_within_range2(2, [7, 8, 9], 4, 8)
但并行。
这里使用enumerate
方便访问data
列表中该行的行索引;否则你只会得到一堆结果,而没有一种简单的方法将它们与原始数据行相关联。