假设我有一个复杂的函数,我不能在列表上运行:
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())问题是,在我的系统监视器上,当它运行时,只有一个内核在工作。所以很明显这不是我所需要的.
非常感谢您的帮助!
发布于 2020-07-29 02:52:53
这是因为你是线程化的,当你使用线程化时,pythons全局解释器锁实际上不会跨多个内核并行运行任务。
取而代之的是,你可以像ThreadPoolExecutor一样使用multiprocessing..Just,它有一个ProcessPoolExecutor,它可以确保多核被利用。
https://stackoverflow.com/questions/63140760
复制相似问题