Python线程池模块,与进程池模块
一、线程池ThreadPoolExecutor
# 导入模块
from concurrent.futures import ThreadPoolExecutor
# 常用方法map方法和submit+as_completed
# 注意,一定要使用with,而不要使用for,如果你一定要用for,那么一定要手动进行executor.shutdown,而你使用了with方法的话,再with方法内部已经实现了wait(),在使用完毕之后可以自行关闭线程池,减少资源浪费。
1.使用map方法:
with ThreadPoolExecutor(max_workers=2) as executor:
result = executor.map(map_fun, itr_arg)
'''map_fun:你传入的要执行的map函数
itr_arg:一个可迭代的参数,可以是列表字典等可迭代的对象
基本上和python的map函数一样
注意result并不是你map_fun返回的结果,而是一个生成器,如果要从中去结果,你可以使用列表生成式或者其他你想使用的方法
'''
for res in result:
print(res) #这个res就是你map_fun返回的结果,你可以在这里做进一步处理
2.使用submit+as_completed
with ThreadPoolExecutor(max_workers=2) as executor:
future= executor.submit(fun, args)
'''
在这里你可以使用for循环来做,返回的是一个future对象
future_list=[]
for i in range(max_workers):
future= executor.submit(fun, args[i])
future_list.append(future)
'''
for res in ac_completed(futrue_list): #这个futrure_list是你future对象的列表
print(res.result()) #循环遍历时用.result()来取返回值
########################
def download_all(sites):
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
to_do = []
for site in sites:
future = executor.submit(download_one, site)
to_do.append(future)
for future in concurrent.futures.as_completed(to_do):
future.result()
Python标准库为我们提供了threading和multiprocessing模块编写相应的异步多线程/多进程代码。从Python3.2开始,标准库为我们提供了concurrent.futures模块,它提供了ThreadPoolExecutor(线程池)和ProcessPoolExecutor(进程池)两个类。
参考博客:https://www.jb51.net/article/153641.htm
https://blog.csdn.net/liuchunming033/article/details/98068216