gpt4 book ai didi

python - 使用多处理或线程加速单个任务

转载 作者:太空狗 更新时间:2023-10-30 01:09:03 25 4
gpt4 key购买 nike

是否可以使用多处理/线程来加速单个任务?我的直觉是答案是否定的。这是我所说的“单一任务”的示例:

for i in range(max):
pick = random.choice(['on', 'off', 'both'])

对于 10000000 的参数,在我的系统上完成大约需要 7.9 秒。

我对如何对多个任务使用多处理和线程有了基本的了解。例如,如果我有 10 个目录,每个目录包含 X 个需要读取的文件,我可以使用创建 10 个线程。

我怀疑单个任务仅使用单个进程(任务管理器报告 CPU 使用率最低)。在这种情况下有没有办法利用我的其他核心?还是提高 CPU/内存速度是获得更快结果的唯一途径?

最佳答案

这是使用和不使用多处理的代码基准:

#!/usr/bin/env python

import random
import time

def test1():
print "for loop with no multiproc: "
m = 10000000
t = time.time()
for i in range(m):
pick = random.choice(['on', 'off', 'both'])
print time.time()-t

def test2():
print "map with no multiproc: "
m = 10000000
t = time.time()
map(lambda x: random.choice(['on', 'off', 'both']), range(m))
print time.time()-t

def rdc(x):
return random.choice(['on', 'off', 'both'])

def test3():
from multiprocessing import Pool

pool = Pool(processes=4)
m = 10000000

print "map with multiproc: "
t = time.time()

r = pool.map(rdc, range(m))
print time.time()-t

if __name__ == "__main__":
test1()
test2()
test3()

这是我工作站(四核)上的结果:

for loop with no multiproc: 
8.31032013893
map with no multiproc:
9.48167610168
map with multiproc:
4.94983720779

Is it possible to speed up a single task using multi-processing/threading? My gut feeling is that the answer is 'no'.

好吧,事实上,答案是“该死的,是的”。

Is there a way to leverage my other cores in such cases? Or is increasing the CPU/Memory speeds the only way to get faster results?

是的,通过使用多处理。由于 GIL,Python 无法使用线程处理多核,但它可以依赖操作系统的调度程序来利用其他核。然后您可以真正改进您的任务。

关于python - 使用多处理或线程加速单个任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17262095/

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