线程池ThreadPoolExecutor
初始化参数:
max_workers:设置最大的线程数
线程池对象的方法:
submit():往线程池中提交任务
map():批量提交任务的
参数1:任务函数
参数2:可迭代对象
shutdown():等待线程池中所有的任务执行完
1、基本使用
from concurrent.futures.thread import ThreadPoolExecutor
import time
from queue import Queue
q = Queue()
def add_data():
"""生产数据"""
for i in range(5):
for j in range(20):
data = "数据--{}---{}".format(i, j)
q.put(data)
# print("【生产数据】{}".format(data))
time.sleep(1)
def handle_data():
"""处理数据"""
while True:
for i in range(4):
try:
data = q.get(timeout=1)
except:
return
else:
print("【处理数据】", data)
q.task_done()
time.sleep(1)
def main():
# 实例化一个线程池对象,max_workers设置最大的线程数
# with ThreadPoolExecutor(max_workers=4) as tp:
# tp.submit(add_data)
# for i in range(3):
# tp.submit(handle_data)
tp = ThreadPoolExecutor(max_workers=4)
tp.submit(add_data)
for i in range(3):
tp.submit(handle_data)
tp.shutdown(wait=True)
q.join()
if __name__ == '__main__':
st = time.time()
main()
et = time.time()
print("程序运行总时长:", et - st)
结果
生成数据数据--0---0
生成数据数据--0---1
生成数据数据--0---2
生成数据数据--0---3
生成数据数据--0---4
生成数据数据--0---5
生成数据数据--0---6
生成数据数据--0---7
生成数据数据--0---8
生成数据数据--0---9
生成数据数据--0---10
生成数据数据--0---11
生成数据数据--0---12
生成数据数据--0---13
生成数据数据--0---14
生成数据数据--0---15
生成数据数据--0---16
生成数据数据--0---17
生成数据数据--0---18
生成数据数据--0---19
【处理数据】,数据--0---0
【处理数据】,数据--0---1
【处理数据】,数据--0---2
【处理数据】,数据--0</