本文共 1089 字,大约阅读时间需要 3 分钟。
from concurrent.futures import ThreadPoolExecutorimport os,time# (1) ThreadPoolExecutor 线程池的基本使用from threading import current_thread as cthread'''def func(i): print("thread ... start" ,cthread().ident ) print("thread ... end " , i) return cthread().ident if __name__ == "__main__": lst = [] setvar = set() # (1) 创建线程池对象 """参数: 默认并发的线程数 是 os.cpu_count() * 5 = 40""" tp = ThreadPoolExecutor() # (2) 异步提交任务 """默认如果一个线程短时间内可以完成更多的任务,线程池就不会使用更多的线程来完成,以节省资源""" for i in range(100): res = tp.submit(func,10) lst.append(res) # (3) 获取返回值 for i in lst: setvar.add(i.result()) # (4) 等待所有子线程执行结束之后,在执行主线程 # tp.shutdown() print("主线程执行结束 .... ") print(setvar , len(setvar)) '''"""无论是进程池还是线程池,都是由固定的进程数或者线程数来执行所有的任务.并不对额外创建多余的进程或者线程."""## (2) 线程池 mapfrom collections import Iterator,Iterabledef func(i): # 同一时间5个线程执行任务 print("thread ... " ,cthread().ident ) return i * "*" if __name__ == "__main__": # 创建线程池对象(最大允许并发5个线程) tp = ThreadPoolExecutor(5) # 把执行的结果返回到迭代器中 it = tp.map(func,range(20)) # 判断返回值是迭代器 print(isinstance(it,Iterator)) # 等待所有子线程执行结束. tp.shutdown() # 遍历迭代器 for i in it: print(i)
转载地址:http://twhzi.baihongyu.com/