Python进阶教程:多线程与多进程 目录Python进阶教程多线程与多进程一、为什么需要并发二、多线程threading2.1 创建线程的两种方式2.2 多线程加速 I/O 任务三、线程安全与锁四、线程池ThreadPoolExecutor五、多进程multiprocessing六、进程池ProcessPoolExecutor七、如何选择线程还是进程八、实战并发下载器总结Python进阶教程多线程与多进程本文是Python 入门教程系列的第 6 篇。前面介绍了网络编程与数据抓取本篇讲解 Python 并发编程的核心多线程与多进程。一、为什么需要并发当程序有大量 I/O 操作网络请求、文件读写或计算密集任务时串行执行会浪费大量等待时间。并发编程能让多个任务同时推进大幅提升效率。二、多线程threading2.1 创建线程的两种方式importthreadingimporttime# 方式一直接传入函数defworker(name,seconds):time.sleep(seconds)print(f{name}完成)t1threading.Thread(targetworker,args(任务1,1))t1.start()t1.join()# 等待线程结束# 方式二继承 Thread 类classMyThread(threading.Thread):defrun(self):foriinrange(3):time.sleep(0.5)print(f{self.name}运行中{i})t2MyThread()t2.start()t2.join()2.2 多线程加速 I/O 任务importthreadingimporttimedefdownload(name,delay):time.sleep(delay)# 模拟网络请求print(f{name}下载完成耗时{delay}s)tasks[(文件A,2),(文件B,1),(文件C,3)]threads[]starttime.time()forname,delayintasks:tthreading.Thread(targetdownload,args(name,delay))t.start()threads.append(t)fortinthreads:t.join()print(f总耗时{time.time()-start:.1f}s)# 约 3s 而非 6s三、线程安全与锁多个线程同时修改共享数据可能出错需要加锁保护importthreading counter0lockthreading.Lock()defincrement(n):globalcounterfor_inrange(n):withlock:# 加锁保护临界区counter1threads[threading.Thread(targetincrement,args(100000,))for_inrange(10)]fortinthreads:t.start()fortinthreads:t.join()print(counter)# 正确结果 1000000四、线程池ThreadPoolExecutor手动管理线程较繁琐推荐使用线程池fromconcurrent.futuresimportThreadPoolExecutorimporttimedeftask(i):time.sleep(0.5)returni*iwithThreadPoolExecutor(max_workers4)aspool:# 提交单个任务futurepool.submit(task,5)print(future.result())# 25# 批量提交resultslist(pool.map(task,range(6)))print(results)# [0, 1, 4, 9, 16, 25]五、多进程multiprocessingPython 的 GIL全局解释器锁使多线程无法真正并行执行 CPU 密集型任务此时应使用多进程frommultiprocessingimportProcessimportosdefcompute(name):print(f进程{name}PID{os.getpid()})totalsum(range(10**7))print(f{name}计算结果{total})if__name____main__:processes[Process(targetcompute,args(fP{i},))foriinrange(4)]forpinprocesses:p.start()forpinprocesses:p.join()print(所有进程执行完毕)六、进程池ProcessPoolExecutorfromconcurrent.futuresimportProcessPoolExecutordefheavy_calc(x):returnsum(range(x))withProcessPoolExecutor(max_workers4)aspool:resultslist(pool.map(heavy_calc,[10**6]*4))print(results)七、如何选择线程还是进程场景推荐原因网络请求、文件读写等 I/O 密集多线程 / 异步GIL 影响小线程开销小CPU 计算密集如图像处理、算法多进程绕过 GIL利用多核 CPU任务数很多线程池 / 进程池复用资源避免频繁创建销毁八、实战并发下载器综合运用线程池写一个模拟并发下载器fromconcurrent.futuresimportThreadPoolExecutorimporttimeimportrandomdefdownload_file(url):模拟下载文件sizerandom.randint(1,10)time.sleep(size*0.1)returnf{url}下载完成{size}MBurls[fhttps://example.com/file{i}.zipforiinrange(10)]starttime.time()withThreadPoolExecutor(max_workers5)aspool:resultslist(pool.map(download_file,urls))forrinresults:print(r)print(f全部下载完成总耗时{time.time()-start:.1f}s)总结本篇介绍了多线程threading、线程池、多进程multiprocessing、进程池、锁机制以及线程/进程的选择策略并用并发下载器串联实战。下一篇将介绍数据库操作敬请期待

相关新闻

最新新闻

构建可审计的LLM科学发现智能体:从问题形成到可信推理

构建可审计的LLM科学发现智能体:从问题形成到可信推理

1. 项目概述:当LLM成为科研伙伴,我们如何确保它“问对问题”?最近和几个在高校做前沿交叉学科研究的朋友聊天,发现一个挺有意思的现象:大家或多或少都在用大语言模型(LLM)辅助自己的科研工作。从…

2026/8/18 1:12:11
一键告别数据线:AirDropPlus让Windows与iPhone互传文件与剪贴板同步不再是难题

一键告别数据线:AirDropPlus让Windows与iPhone互传文件与剪贴板同步不再是难题

一键告别数据线:AirDropPlus让Windows与iPhone互传文件与剪贴板同步不再是难题 【免费下载链接】AirDropPlus Effortless file transfer and clipboard sync between Windows and iOS — powered by Python and Apple Shortcuts. 项目地址: https://gitcode.com/g…

2026/8/18 1:12:11
3步搞定极简Obsidian主页:这套免费模板让你的笔记管理主页既美观又能追踪进度

3步搞定极简Obsidian主页:这套免费模板让你的笔记管理主页既美观又能追踪进度

3步搞定极简Obsidian主页:这套免费模板让你的笔记管理主页既美观又能追踪进度 【免费下载链接】obsidian-homepage Obsidian homepage - Minimal and aesthetic template (with my unique features) 项目地址: https://gitcode.com/gh_mirrors/obs/obsidian-homep…

2026/8/18 1:12:11
MMShopBench:构建真实多模态购物智能体评测基准的技术挑战与实战思考

MMShopBench:构建真实多模态购物智能体评测基准的技术挑战与实战思考

1. 为什么我们需要一个“真实”的购物智能体评测基准?最近在跟几个做AI智能体(Agent)的朋友聊天,大家普遍有个感觉:现在评测智能体的基准(Benchmark)越来越多了,但很多评测结果拿到真…

2026/8/18 1:12:11
Icarus 数据模型解析:PostgreSQL 与 hstore、citext 扩展的实战应用

Icarus 数据模型解析:PostgreSQL 与 hstore、citext 扩展的实战应用

Icarus 数据模型解析:PostgreSQL 与 hstore、citext 扩展的实战应用 【免费下载链接】Icarus 🕊️ An opensource community/forum project write with python3 aiohttp and vue.js. 一个开源的社区程序,临时测试站:https://t.myr…

2026/8/18 1:12:11
Agentic AI与检索增强模型在保险核保自动化中的实践与架构解析

Agentic AI与检索增强模型在保险核保自动化中的实践与架构解析

1. 项目概述:当“智能体”遇见“检索增强”,重塑核保流程最近和几位在保险科技领域深耕的朋友聊天,大家不约而同地提到了一个词:“Straight-Through Underwriting”(直通式核保)。这玩意儿说白了&#xff0…

2026/8/18 1:07:10