gpt4 book ai didi

python - 为什么以下简单的并行化代码比 Python 中的简单循环慢得多?

转载 作者:太空狗 更新时间:2023-10-30 00:53:28 28 4
gpt4 key购买 nike

一个计算数字平方并存储结果的简单程序:

    import time
from joblib import Parallel, delayed
import multiprocessing

array1 = [ 0 for i in range(100000) ]

def myfun(i):
return i**2

#### Simple loop ####
start_time = time.time()

for i in range(100000):
array1[i]=i**2

print( "Time for simple loop --- %s seconds ---" % ( time.time()
- start_time
)
)
#### Parallelized loop ####
start_time = time.time()
results = Parallel( n_jobs = -1,
verbose = 0,
backend = "threading"
)(
map( delayed( myfun ),
range( 100000 )
)
)
print( "Time for parallelized method --- %s seconds ---" % ( time.time()
- start_time
)
)

    #### Output ####
# >>> ( executing file "Test_vr20.py" )
# Time for simple loop --- 0.015599966049194336 seconds ---
# Time for parallelized method --- 7.763299942016602 seconds ---

可能是这两个选项在数组处理方面的差异?我的实际程序会有更复杂的东西,但这是我需要并行化的计算,尽可能简单,但不是这样的结果。

System Model: HP ProBook 640 G2, Windows 7,
IDLE for Python System Type: x64-based PC Processor:
Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz,
2401 MHz,
2 Core(s),
4 Logical Processor(s)

最佳答案

来自documentation 线程:

If you know that the function you are calling is based on a compiled extension that releases the Python Global Interpreter Lock (GIL) during most of its computation ...

问题是在这种情况下,您不知道。 Python 本身一次只会允许一个线程运行(python 解释器在每次执行 python 操作时都会锁定 GIL)。

threading 仅在 myfun() 将大部分时间花在已编译的 Python 扩展中时才有用,并且该扩展释放了 GIL.

Parallel 代码慢得令人尴尬,因为您正在做大量工作来创建多个线程 - 然后您一次只执行一个线程。

如果你使用multiprocessing后端,那么你必须将输入数据复制到四个或八个进程中的每一个(每个核心一个),在每个进程中进行处理,然后复制输出数据回来。复制会很慢,但如果处理比仅仅计算一个平方稍微复杂一点,那可能是值得的。测量并查看。

关于python - 为什么以下简单的并行化代码比 Python 中的简单循环慢得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46727090/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com