为什么 python 多进程池比只有一个进程慢?
Why python multiprocess pool is slower than one process only?
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 threads 实际上并不是 运行 并行的而是时间片的。原因是因为 python 解释器不是线程安全的。
说过,python 线程在您需要做大量 IO 绑定的事情时很方便,但它只会在尝试执行 CPU 绑定任务(比如您的任务)时增加开销.
该解决方案通常使用 python.multiprocess
(请参阅 python multi-threading slower than serial?),但是对于您的情况,我不确定它是否会有所改善,因为每个线程所做的工作量非常大你付出的很少而且唯一的事情就是上下文切换。
尝试为每个线程分配更多迭代,或考虑使用支持真正多线程的 C++。
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 threads 实际上并不是 运行 并行的而是时间片的。原因是因为 python 解释器不是线程安全的。
说过,python 线程在您需要做大量 IO 绑定的事情时很方便,但它只会在尝试执行 CPU 绑定任务(比如您的任务)时增加开销.
该解决方案通常使用 python.multiprocess
(请参阅 python multi-threading slower than serial?),但是对于您的情况,我不确定它是否会有所改善,因为每个线程所做的工作量非常大你付出的很少而且唯一的事情就是上下文切换。
尝试为每个线程分配更多迭代,或考虑使用支持真正多线程的 C++。