1.为什么要使用线程池?
a.线程创建所需时间T1,线程执行所需时间T2,线程销毁所需时间T3,往往T1+T3>T2
b.线程是稀缺资源,创建线程会消耗系统资源,降低系统稳定性,线程池可以管理线程,进行统一分配调度。每个线程各分配一个任务,剩下的任务排队等待,当某个线程完成了任务的时候,排队任务就可以安排给这个线程继续执行。
从Python3.2
开始,标准库为我们提供了concurrent.futures
模块,它提供了ThreadPoolExecutor,
实现了对threading
的进一步抽象:
1.主线程可以获取某一个线程(或者任务的)的状态,以及返回值。
2.当一个线程完成的时候,主线程能够立即知道
# -*- coding: UTF-8 -*-
from concurrent.futures import ThreadPoolExecutor
import time
def get_html(times):
time.sleep(times)
print('get page {}s finished'.format(times))
return times
if __name__ == '__main__':
executor = ThreadPoolExecutor(max_workers=2)
#submit通过submit提交执行的函数到线程池,submit函数立即返回,不阻塞
task1=executor.submit(get_html,(3))
task2