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
我是否误解了游泳池的用法?为什么游泳池这么慢?
答案 0 :(得分:0)
Python 线程实际上并不是并行运行,而是时间切片。原因是因为python解释器不是线程安全的。
说,当你需要做很多IO绑定的东西时,python线程很方便,但是在尝试执行CPU绑定任务时(例如你的),它只会增加开销。
解决方案通常使用python.multiprocess
(请参阅python multi-threading slower than serial?),但是在您的情况下,我不确定它是否会改进,因为您为每个线程执行的工作量非常少,你唯一要付的是上下文切换。
尝试为每个线程分配更多迭代,或者考虑使用支持真正多线程的C ++。