首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python语言中并行化一个简单的循环,并使用concurrent.futures获得结果

在Python语言中并行化一个简单的循环,并使用concurrent.futures获得结果
EN

Stack Overflow用户
提问于 2020-07-29 02:39:12
回答 1查看 223关注 0票数 2

假设我有一个复杂的函数,我不能在列表上运行:

代码语言:javascript
复制
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

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

代码语言:javascript
复制
#without parallelization
processedData = [complicated_function(x) for x in inputData]

为了进行并行处理,我查看了一些教程,并编写了以下代码:

代码语言:javascript
复制
#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())

问题是,在我的系统监视器上,当它运行时,只有一个内核在工作。所以很明显这不是我所需要的.

非常感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-29 02:52:53

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

取而代之的是,你可以像ThreadPoolExecutor一样使用multiprocessing..Just,它有一个ProcessPoolExecutor,它可以确保多核被利用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63140760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档