python的多线程是伪多线程。
===
比较python 线程池和进程池运行模式,哪个执行更快?
测试电脑硬件配置:
cpu - intel(R) Core(TM) i5-7400 CPU @ 3.00GHz,内存 8G,如下图:
测试代码如下:
import concurrent.futures
import time
number_list = list(range(1, 101))
# 循环次数分别为10次、100次和1000次
def count(number):
for i in range(0,10000000):
i += 1
return i*number
def evaluate(item):
result_item = count(item)
if item == len(number_list):
print(' 循环次数: %s ' % item)
if __name__ == '__main__':
# 有序模式
start_time = time.time()
for item in number_list:
evaluate(item)
print(' 有序模式执行,耗时: %s 秒' % (time.time() - start_time))
print()
# 线程池模式
start_time = time.time()
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
for item in number_list:
executor.submit(evaluate, item)
print(' 线程池模式执行,耗时:%s 秒' % (time.time() - start_time))
print()
# 进程池模式
start_time = time.time()
with concurrent.futures.ProcessPoolExecutor(max_workers=5) as executor:
for item in number_list:
executor.submit(evaluate, item)
print(' 多进程池模式执行,耗时:%s 秒' % (time.time() - start_time))
循环10次的运行结果如下:
循环次数: 10
有序模式执行,耗时: 3.892 秒
循环次数: 10
线程池模式执行,耗时:3.971 秒
循环次数: 10
多进程池模式执行,耗时:2.094 秒
循环100次的运行结果如下:
循环次数: 100
有序模式执行,耗时: 41.788 秒
循环次数: 100
线程池模式执行,耗时:38.401 秒
循环次数: 100
进程池模式执行,耗时:10.588 秒
循环1000次的运行结果如下:
循环次数: 1000
有序模式执行,耗时: 419.848 秒
循环次数: 1000
线程池模式执行,耗时:385.321 秒
循环次数: 1000
进程池模式执行,耗时:101.964 秒
从以上三次运行结果看,进程池模式的执行速度都是最快的!在循环次数较多的情况下,进程池模式的执行速度都接近线程池或有序执行模式的4倍,而有序执行和线程池模式执行模式的耗时差别不大,这也证明python的多线程是伪多线程。