如何在Python中实现多线程编程? 计算机编程
如何在Python中实现多线程编程? 计算机编程在 Python 中实现多线程编程主要依赖于标准库中的 threading 模块。以下是关于如何实现多线程、适用场景以及关键注意事项的详细指南。基础实现方法Python 提供了多种创建和管理线程的方式最常用的是通过 threading.Thread 类。方法一直接实例化 Thread 类这是最简单的方式通过 target 参数指定线程要执行的函数args 参数传递该函数的参数。pythonimport threadingimport timedef worker(name, duration):“”“模拟耗时任务”“”print(f线程 {name} 开始执行)time.sleep(duration)print(f线程 {name} 执行完成)ifname ‘main’:# 创建线程列表threads []# 创建并启动多个线程 for i in range(3): # target: 目标函数, args: 传递给目标函数的参数元组 t threading.Thread(targetworker, args(fThread-{i}, 2)) threads.append(t) t.start() # 启动线程 # 等待所有线程执行完毕 for t in threads: t.join() # 阻塞主线程直到子线程结束 print(所有线程执行完毕)方法二继承 Thread 类对于逻辑较复杂的线程可以通过继承 threading.Thread 类并重写 run() 方法来定义线程行为。pythonimport threadingclass MyThread(threading.Thread):definit(self, thread_id, name):super().init()self.thread_id thread_idself.name namedef run(self): print(f线程 {self.name} 正在运行) # 在此处编写线程的具体逻辑ifname ‘main’:t1 MyThread(1, “Thread-1”)t2 MyThread(2, “Thread-2”)t1.start() t2.start() t1.join() t2.join()线程同步与数据安全当多个线程同时访问共享资源如全局变量、文件、数据库连接时可能会发生‌竞态条件Race Condition leading to data inconsistency‌。为了解决这个问题需要使用锁机制。使用 Lock 保护共享资源threading.Lock 确保同一时刻只有一个线程能访问临界区代码。pythonimport threadingcounter 0lock threading.Lock()def increment():global counterfor _ in range(100000):with lock: # 获取锁执行完后自动释放counter 1threads [threading.Thread(targetincrement) for _ in range(4)]for t in threads:t.start()for t in threads:t.join()print(f最终计数结果: {counter}) # 结果始终为 400000保证数据正确性3. 高级用法线程池手动管理大量线程的创建和销毁开销较大推荐使用 concurrent.futures 模块中的 ThreadPoolExecutor它能更高效地管理线程资源。pythonfrom concurrent.futures import ThreadPoolExecutorimport timedef io_bound_task(url):# 模拟网络请求或文件读写time.sleep(1)return fData from {url}urls [“url1”, “url2”, “url3”, “url4”]创建包含4个最大工作线程的线程池with ThreadPoolExecutor(max_workers4) as executor:# map方法会将任务分配给线程池中的线程并行执行results list(executor.map(io_bound_task, urls))print(results)4. 关键注意事项GIL 与适用场景在 Python 中使用多线程时必须理解 ‌全局解释器锁GIL, Global Interpreter Lock‌ 的影响‌I/O 密集型任务推荐多线程‌‌场景‌网络请求、文件读写、数据库操作等。miaozanwang.com.cndyfs.infohuiyunkm.com.cnhuiyunkameng.com.cndydianzan.com.cnksdianzan.com.cn‌原因‌这些任务大部分时间在等待 I/O 响应CPU 处于空闲状态。多线程可以在一个线程等待 I/O 时切换到另一个线程执行从而显著提高程序整体效率。‌CPU 密集型任务不推荐多线程‌‌场景‌大量数学计算、视频解码、图像处理等。‌原因‌由于 GIL 的存在同一时刻只能有一个线程执行 Python 字节码。在 CPU 密集型任务中多线程不仅无法利用多核优势反而因为线程切换开销导致性能下降。‌建议方案‌对于 CPU 密集型任务应使用 multiprocessing 模块多进程来绕过 GIL 限制真正利用多核处理器。5. 总结最佳实践‌优先使用 threading 模块或 concurrent.futures.ThreadPoolExecutor‌避免使用底层的 _thread 模块。‌明确任务类型‌如果是 I/O 密集型使用多线程如果是 CPU 密集型使用多进程。‌注意线程安全‌访问共享数据时务必使用锁Lock、信号量Semaphore或队列Queue等同步机制。‌控制线程数量‌不要无限制地创建线程过多的线程会导致上下文切换开销过大甚至耗尽系统内存。使用线程池可以有效控制并发数量。

相关新闻

AI Browser — 让大模型真正懂网页的浏览器,Playwright 的真正替代

AI Browser — 让大模型真正懂网页的浏览器,Playwright 的真正替代

大模型操控浏览器的正确打开方式 你是不是遇到过这些问题: Playwright 的 screenshot GPT-4V 看图识别,根本不知道哪个按钮能点、哪个 input 输什么 OpenAI Operator 截图驱动,慢、贵、不稳定,验证码卡死 Selenium 写死 xpath&am…

2026/7/19 18:40:02阅读更多 →
12个超实用的Adobe Illustrator自动化脚本:设计师效率提升完整指南

12个超实用的Adobe Illustrator自动化脚本:设计师效率提升完整指南

12个超实用的Adobe Illustrator自动化脚本:设计师效率提升完整指南 【免费下载链接】illustrator-scripts Some powerfull JSX scripts for extending Adobe Illustrator 项目地址: https://gitcode.com/gh_mirrors/ill/illustrator-scripts Adobe Illustrat…

2026/7/19 18:40:02阅读更多 →
Altium电路图查看器终极指南:免费开源工具实现专业电路设计预览

Altium电路图查看器终极指南:免费开源工具实现专业电路设计预览

Altium电路图查看器终极指南:免费开源工具实现专业电路设计预览 【免费下载链接】python-altium Altium schematic format documentation, SVG converter and TK viewer 项目地址: https://gitcode.com/gh_mirrors/py/python-altium python-altium 是一款革命…

2026/7/19 18:40:02阅读更多 →
ngx_output_chain_get_buf

ngx_output_chain_get_buf

1 定义 ngx_output_chain_get_buf 函数 定义在 src/core/ngx_output_chain.cstatic ngx_int_t ngx_output_chain_get_buf(ngx_output_chain_ctx_t *ctx, off_t bsize) {size_t size;ngx_buf_t *b, *in;ngx_uint_t recycled;in ctx->in->buf;size ctx->buf…

2026/7/20 0:15:05阅读更多 →
互联网大厂常见Java面试题及答案汇总(2026持续更新)

互联网大厂常见Java面试题及答案汇总(2026持续更新)

金九银十即将来袭,又是一个跳槽的好季节,准备跳槽的同学都摩拳擦掌准备大面好几场,今天为大家准备了互联网面试必备的 1 到 5 年 Java 面试者都需要掌握的面试题,分别 JVM,并发编程,MySQL,Tomca…

2026/7/20 0:15:05阅读更多 →
python数据可视化技巧的100个练习 -- 31. 类别数据的点图

python数据可视化技巧的100个练习 -- 31. 类别数据的点图

重要性★★★☆☆ 难度★★☆☆☆ 你是一家零售公司的数据分析师。你的经理要求你可视化最近产品发布的客户满意度评级分布。评级是分类的,范围从“非常不满意”到“非常满意”。创建一个点图以显示每个评级类别的频率。使用 Python 进行数据处理和可视化。在代码中生成输入…

2026/7/20 0:13:05阅读更多 →
智能体走进物理世界,千里科技携舱驾协同成果亮相WAIC 2026

智能体走进物理世界,千里科技携舱驾协同成果亮相WAIC 2026

在2026世界人工智能大会(WAIC 2026)举办期间,千里科技董事长、阶跃星辰董事长印奇作为特邀嘉宾出席大会开幕式并在大会主论坛(上午场)发表主题演讲《当智能体进入物理世界》。在印奇看来,"智能体"…

2026/7/20 0:13:05阅读更多 →
商汤大装置发布“技术-生态-商业”闭环布局,共启“国产AI基础设施规模化商用元年”

商汤大装置发布“技术-生态-商业”闭环布局,共启“国产AI基础设施规模化商用元年”

7月18日,在WAIC 2026商汤科技 “基座大模型架构创新与生态合作论坛”上,商汤科技联合创始人、大装置事业群总裁杨帆发表《智变共生——加速AI基础设施持续升级》主题演讲,系统呈现了商汤大装置国产AI基础设施“技术-生态-商业”闭环布局&…

2026/7/20 0:13:05阅读更多 →
2026郑州美发学校避坑指南:拆解5种教学方式,谁在“流水线”谁在“真传技”?

2026郑州美发学校避坑指南:拆解5种教学方式,谁在“流水线”谁在“真传技”?

2026年想在郑州学美发,很多零基础学员最先搜索的问题就是:郑州美发学校哪家好?这个问题没有一个只看学校名字就能得出的答案。因为不同学校的课程方向、学习周期、教学方式和适合人群并不一样。有的更适合零基础,有的偏向发型师进修,还有的只做某一项短期技术培训。对于完全没…

2026/7/20 0:11:05阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/20 0:50:54阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/20 0:50:54阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/20 0:50:54阅读更多 →
2026 WAIC:努比亚二代“豆包手机”NaviX Ultra亮相,智能体验全面升级!

2026 WAIC:努比亚二代“豆包手机”NaviX Ultra亮相,智能体验全面升级!

7月18日智东西消息,在2026 WAIC期间,努比亚联合字节豆包打造的二代“豆包手机”努比亚NaviX Ultra首次亮相,相比一代有诸多升级。智能体手机理念中兴通讯终端事业部总裁、努比亚总裁倪飞表示,智能体手机要从人操作手机变为手机帮人…

2026/7/20 0:01:04阅读更多 →
努比亚NaviX Ultra亮相WAIC,智能体手机能否让用户生活更简单?

努比亚NaviX Ultra亮相WAIC,智能体手机能否让用户生活更简单?

努比亚NaviX Ultra:外观与功能双升级在2026 WAIC期间,首次亮相的努比亚NaviX Ultra吸引了众多目光。它是努比亚联合字节豆包打造的二代“豆包手机”,与一代努比亚M153相比,外观设计变化较大。其机身背部搭载横向排布的大尺寸影像模…

2026/7/20 0:01:04阅读更多 →
C# 将逗号分割的字符串转换为long,并添加到List<long>

C# 将逗号分割的字符串转换为long,并添加到List<long>

目录 方法1:使用Split和Convert.ToInt64 方法2:使用LINQ的Select和ToList 方法3:使用TryParse进行异常安全转换(推荐) 如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天…

2026/7/20 0:01:04阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/19 22:50:49阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/19 14:50:26阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/19 18:50:36阅读更多 →