Python多处理似乎比常规执行慢

时间:2018-11-30 10:01:33

标签: python python-2.7 python-multiprocessing

在下面的代码中,我正在生成一个数字9999的多维数据集,并通过线程池和常规方法调用它。

我正在计时两者之间的差异。似乎普通方法更快。我正在python 2.7终端中的具有16 gig ram的i7第八代英特尔处理器上运行此程序。

我对此感到困惑。可能是我缺少了一些东西。我希望这个问题对将来的人们有所帮助。

import time
from multiprocessing.pool import ThreadPool

def cube():
    return 9999*9999*9999

print "Start Execution Threading: "
x = int(round(time.time() * 1000))
pool = ThreadPool()

for i in range(0,100):
  result = pool.apply_async(cube, ())
  result = pool.apply_async(cube, ())
  result = pool.apply_async(cube, ())
  # print result.get()

pool.close()
pool.join()

print "Stop Execution Threading: "
y = int(round(time.time() * 1000))

print y-x

print "Start Execution Main: "
x = int(round(time.time() * 1000))

for i in range(0,100):
  cube()
  cube()
  cube()

print "Stop Execution Main: "
y = int(round(time.time() * 1000))
print y-x

2 个答案:

答案 0 :(得分:3)

多处理意味着您将开始一个新线程。这带有很大的开销,因为必须对其进行初始化。这样,多线程仅在并行执行任务时才有回报,尤其是在python中,并行执行任务需要花费大量时间(与python启动时间相比),并且可以异步运行这些任务。

在您的情况下,简单的乘法运算执行得如此之快,将无济于事。

答案 1 :(得分:1)

由于".$1['$2'].",您正在使用多线程而不是多处理。 CPython使用全局解释器锁来防止多个线程同时执行Python代码。

因此,由于您的程序受CPU限制,因此由于GIL而增加线程开销没有任何好处。多线程在Python中对于受IO限制的问题确实有意义,因为线程可以在其他人等待IO完成时运行。

您可以尝试使用真正的多处理程序,因为每个Python进程都会有自己的GIL,但是我仍然不确定这样做的好处,因为进程之间的通信会增加更多的开销...