Python多处理查询

2024-04-20 12:10:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习python的多处理模块。我想让我的代码使用我所有的CPU资源。这是我写的代码:

from multiprocessing import Process
import time

def work():
   for i in range(1000):
      x=5
      y=10
      z=x+y

if __name__ == '__main__':
   start1 = time.time()
   for i in range(100):
      p=Process(target=work)
      p.start()
      p.join()
   end1=time.time()
   start = time.time()
   for i in range(100):
      work()
   end=time.time()
   print(f'With Parallel {end1-start1}')
   print(f'Without Parallel {end-start}')

我得到的输出是:

^{pr2}$

我尝试过在不同的并行范围内运行更快的语句,但我只在不同的并行范围内运行。我有什么遗漏吗?在

提前谢谢!在


Tags: 模块代码inimportfortimeparallelrange
1条回答
网友
1楼 · 发布于 2024-04-20 12:10:47

您的基准测试方法存在问题:

for i in range(100):
    p = Process(target=work)
    p.start()
    p.join()

我想您想并行运行100个进程,但是Process.join()blocks until process exit,实际上是串行运行的。此外,运行比CPU核心数更多的繁忙进程会导致高CPU争用,这是一个性能损失。正如一条评论指出的,与创建Process的开销相比,work()函数太简单了。在

更好的版本:

^{pr2}$

结果:

With Parallel 4.2835s
Without Parallel 33.0244s
Acceleration factor 7.71

相关问题 更多 >