为什么python多进程池比一个进程慢?

时间:2015-11-28 08:09:47

标签: python threadpool python-multiprocessing

time_1 = time.time()
num = 1000000
for i in range(num):
    print i
time_2 = time.time()
print time_2 - time_1
  

13.1949999332

def time_test_pool(num):
    print num

if __name__ == "__main__":
    time_1 = time.time()
    num = 1000000
    pool = ThreadPool(8)
    pool.map(time_test_pool, range(num))
    pool.close()
    pool.join()
    time_2 = time.time()
    print time_2 - time_1
  

15.8250000477

我是否误解了游泳池的用法?为什么游泳池这么慢?

1 个答案:

答案 0 :(得分:0)

Python 线程实际上并不是并行运行,而是时间切片。原因是因为python解释器不是线程安全的。

说,当你需要做很多IO绑定的东西时,python线程很方便,但是在尝试执行CPU绑定任务时(例如你的),它只会增加开销。

解决方案通常使用python.multiprocess(请参阅python multi-threading slower than serial?),但是在您的情况下,我不确定它是否会改进,因为您为每个线程执行的工作量非常少,你唯一要付的是上下文切换。

尝试为每个线程分配更多迭代,或者考虑使用支持真正多线程的C ++。

相关问题