在 Python 中并行化一个简单循环并在 concurrent.futures 中获得结果

Parallelize a simple loop in Python and get results with concurrent.futures

假设我有复杂的功能,我无法在列表中 运行 :

import concurrent.futures
import random
import numpy as np    

inputData = random.sample(range(60000, 1000000), 50)

def complicated_function(x):
"""complicated stuff"""
return x**x

我可以通过这种方式直接在循环中处理(这就是我希望在代码末尾得到结果的方式,如果可能的话顺序相同):

#without parallelization
processedData = [complicated_function(x) for x in inputData]

对于并行处理,我查看了教程并编写了以下代码:

#with parallelization
processedData2 = []
with concurrent.futures.ThreadPoolExecutor() as e:
    fut = [e.submit(complicated_function, inputData[i]) for i in range(len(inputData))]
    for r in concurrent.futures.as_completed(fut):
        processedData2.append(r.result())

问题是,在 运行ning 时,在我的系统监视器上看到只有一个核心在工作。所以很明显这没有按我的需要工作...

非常感谢您的帮助!

这是因为你在线程化,当你使用线程化时,python 的全局解释器锁实际上并没有运行跨多个内核并行的任务。

相反,您可以使用多处理。就像 ThreadPoolExecutor 一样,有一个 ProcessPoolExecutor 可以确保使用多个内核。