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
我是否误解了pool的用法?为什么池这么慢?
最佳答案
Python 线程实际上并不是并行运行,而是按时间切片运行。原因是因为python解释器不是线程安全的。
也就是说,当您需要执行大量 IO 密集型任务时,Python 线程很方便,但在尝试执行 CPU 密集型任务(例如您的任务)时,它只会增加开销。
解决方案通常使用 python.multiprocess
(请参阅 python multi-threading slower than serial? ),但是在您的情况下,我不确定它会改善情况,因为您每个线程所做的工作量是很少,你唯一需要付出的就是上下文切换。
尝试为每个线程分配更多迭代,或者考虑使用支持真正多线程的 C++。
关于python - 为什么python多进程池比单进程慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33969151/