博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程池
阅读量:3960 次
发布时间:2019-05-24

本文共 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/

你可能感兴趣的文章