Python的线程池
Python的线程池是一种很好的多线程处理方式,它可以有效的避免线程创建和销毁的开销,提高程序的运行效率。
线程池的使用
线程池的使用非常简单,只需要两步:
第一步,创建一个线程池,并指定线程池的大小;
第二步,将需要执行的任务放入线程池中,并执行。
下面我们来看一下如何使用线程池进行多线程处理。
首先我们来实现一个简单的多线程程序,它可以计算1~100000之间所有数字的和,代码如下所示。
import time def calc_sum(numbers): sum = 0 for n in numbers: sum = sum + n return sum if name == "main": numbers = range(1, 100001) start = time.time() sum = calc_sum(numbers) end = time.time() print('计算结果为:%d' % sum) print('运行时间为:%f秒' % (end - start))
运行结果如下所示。
计算结果为:500000500000 运行时间为:0.106573秒
可以看到,计算1~100000之间所有数字的和只需要0.106573秒,非常快。
接下来我们使用线程池来重写这个程序,代码如下所示。
import time from concurrent.futures import ThreadPoolExecutor def calc_sum(numbers): sum = 0 for n in numbers: sum = sum + n return sum if name == "main": numbers = range(1, 100001) start = time.time() with ThreadPoolExecutor(3) as executor: executor.map(calc_sum, [numbers]) end = time.time() print('计算结果为:%d' % sum) print('运行时间为:%f秒' % (end - start))
运行结果如下所示。
计算结果为:500000500000 运行时间为:0.034847秒
可以看到,使用线程池后,程序的运行时间大大减少,从0.106573秒减少到了0.034847秒。