当前位置:首页>python>Python基础篇 - 多线程-线程池

Python基础篇 - 多线程-线程池

  • 2026-10-11 08:24:06
Python基础篇 - 多线程-线程池
多线程-线程池

在之前的文章Python基础篇 - 多进程-进程池中,我们认识了进程池的创建。今天的Python基础篇知识将介绍线程池。 

  关于进程与线程的概念,在文章Python基础篇 - 进程与线程、并发与并行有详细的介绍。

一.线程池

线程池就是提前开好固定数量的线程,循环反复干活,不销毁、不重复创建。

  在之前,多线程的创建,手动创建多个线程:来一个任务,相当于招一个工人,干完就辞退。 频繁招人辞退,浪费时间、浪费资源。但是,线程池:提前固定招好若干个工人,任务来了就干活,干完不辞退,坐等下一个任务。实现复用,效率极高。

  线程池的API是ThreadPoolExecutor

  任务提交方法主要是两个:submit和map

submit:提交不同的单个任务,适合参数不一样、灵活获取返回。

map:批量批量自动传参,适合批量统一任务。

1. submit-单任务异步

from concurrent.futures import ThreadPoolExecutorimport time# 定义线程任务def work_1(num):    print(f"任务{num}开始执行")    time.sleep(1)  # 模拟任务耗时    return f"任务{num}执行完成"def work_2(name):    print(f"{name}开始工作")    time.sleep(1)    return f"{name}已经工作完成"if __name__ == "__main__":    # 创建线程池,最大3个线程同时工作    pool = ThreadPoolExecutor(max_workers=3)    # 提交任务    # submit(fn(任务函数),args(函数参数))    future1 = pool.submit(work_1,1)    future2 = pool.submit(work_2,'xiaoming')    # result()方法获取结果    work1 = future1.result()    work2 = future2.result()        # 关闭线程池    pool.shutdown()    print("所有任务全部结束")

2. map-批量任务

from concurrent.futures import ThreadPoolExecutorimport time# 定义线程任务def work(num):    print(f"任务{num}开始执行")    time.sleep(1) # 模拟任务耗时    return f"任务{num}完成"if __name__ == "__main__":    pool = ThreadPoolExecutor(max_workers=3)    # 批量自动执行任务    nums = [1,2,3,4,5]    results = pool.map(work, nums)    # 遍历结果,无需result方法    for res in results:        print(res)    # 关闭线程池    pool.shutdown()    print("全部任务结束")

可以看到,submit方法适合任务不一致,需要单独拿到结果的情况;map方法适合同一批量任务的生产情况。

总结:今日我们学习了Python基础篇-多线程-线程池。线程池可以创建固定数量线程,实现线程复用,避免频繁创建销毁线程带来的资源消耗,有效控制并发数量。通过ThreadPoolExecutor创建线程池的两种常用提交方法:submit提交单个异步任务,map批量统一执行任务,掌握线程池创建、任务提交和shutdown关闭收尾操作。在Python基础篇,后续我们将持续学习Python基础知识,介绍各种算法,祝每一位study er学习愉快。

合集链接
这里是我滴合集内容链接,大家感兴趣就康康吧。
1. 人工智能进阶之路 - 机器学习篇
2.人工智能进阶之路 - 深度学习篇
3. AI发展前点
4. 人工智能进阶之路-Python基础篇
5. 充电er的乱坠闲聊
6. Origin认知
点个 赞 你最好看

最新文章

随机文章