python_并发编程——线程池
1.线程池
import time from concurrent.futures import ThreadPoolExecutor def func(n): time.sleep(2) print(n) t_pool = ThreadPoolExecutor(max_workers=5) # 创建线程池对象,设置线程池大小,建议不超过cpu数*5 for i in range(20): t_pool.submit(func,i) # 启动进程池,(执行的函数,传递的参数)
结果:每过两秒钟随机打印5个数。
import time from concurrent.futures import ThreadPoolExecutor def func(n): time.sleep(2) print(n) t_pool = ThreadPoolExecutor(max_workers=5) # 创建线程池对象,设置线程池大小,建议不超过cpu数*5 for i in range(20): t_pool.submit(func,i) # 启动进程池,(执行的函数,传递的参数) t_pool.shutdown() # 线程池被执行完,才会执行主线程的内容。 print(‘主线程!‘)
结果:
2.取出线程池中函数的返回值
from concurrent.futures import ThreadPoolExecutor def func(n): return n*n t_pool = ThreadPoolExecutor(max_workers=5) # 创建线程池对象,设置线程池大小,建议不超过cpu数*5 t_list = [] for i in range(20): # 接收进程池的返回值 t = t_pool.submit(func,i) # 将返回值添加进列表 t_list.append(t) t_pool.shutdown() # 线程池被执行完,才会执行主线程的内容。 print(‘主线程!‘) for i in t_list: print(i.result()) # 用result方法,打印列表中的值
结果:
3.进程池
导入ProcessPoolExecutor模块,方法和线程池一样。
4.map()方法:
from concurrent.futures import ThreadPoolExecutor import time def func(n): time.sleep(2) print(n) t_pool = ThreadPoolExecutor(max_workers=5) # 创建线程池对象,设置线程池大小,建议不超过cpu数*5 t_pool.map(func,range(20)) # 启动进程池,(执行的函数,传递的参数(可迭代的))
结果:每过两秒钟随机打印5个数。map方法无法拿到函数的返回值。
5.回调函数
from concurrent.futures import ThreadPoolExecutor def func(n): return n*n def call_back(m): print(‘回调函数:‘,m.result()) # m是一个对象,需要用result方法,才能得到值 t_pool = ThreadPoolExecutor(max_workers=5) t_pool.submit(func,5).add_done_callback(call_back) # 回调函数(回调函数的函数名)
结果:
相关推荐
meylovezn 2020-05-30
cenylon 2020-04-29
ljngya 2020-07-30
齐天大圣数据候 2020-07-30
爱传文档 2020-07-28
jameszgw 2020-06-25
fengling 2020-05-31
大步流星 2020-05-28
Ken专注后端技术 2020-05-07
nurvnurv 2020-05-01
fengyeezju 2020-04-26
csde 2020-03-05
nbfcome 2020-02-21
huaye00 2020-02-18
xdhywj 2020-02-13
greensomnuss 2012-09-11
xzkjgw 2020-01-23
少年阿涛 2020-01-12
MichelinMessi 2020-01-07