看一个例子:
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
列表中行的行索引;否则,您只会得到一堆结果,而没有一种简单的方法将它们与原始数据行相关联。