python线程间怎么通信 - 实践

news/2025/11/9 11:07:03/文章来源:https://www.cnblogs.com/ljbguanli/p/19203941

python线程间怎么通信 - 实践

Python 线程间通信(Inter-Thread Communication, ITC) 是理解并发编程的核心之一。
由于同一进程内的所有线程 共享内存空间,它比进程间通信(IPC)更高效,但也更危险 —— 稍不注意就会出现数据竞争、死锁等问题。

一、线程之间为什么要通信?

多线程的目的是让多个任务并行执行(例如 I/O 并发、后台计算、异步日志等)。
但这些线程往往需要共享数据或协调动作,比如:
• 一个线程生产数据,另一个线程消费;
• 主线程通知子线程停止;
• 多线程同时写日志;
• 多线程之间需要同步状态。

因此,需要安全的通信机制来传递数据、协调执行。

二、线程间通信的基本特征

请添加图片描述

⚙️ 三、常见的通信与同步机制

Python 提供了多种线程间通信方式,主要有以下几类:

请添加图片描述

1. Queue — 最推荐的通信方式

queue.Queue 是线程安全的 FIFO 队列(内部用锁同步),适合“生产者-消费者”模型。

示例:生产者与消费者

import threading, queue, time
q = queue.Queue(maxsize=5)
def producer():
for i in range(10):
item = f"任务-{i}"
q.put(item)      # 自动加锁
print(f"生产:{item}")
time.sleep(0.5)
def consumer():
while True:
item = q.get()   # 自动等待可用
print(f"消费:{item}")
time.sleep(1)
q.task_done()
threading.Thread(target=producer).start()
threading.Thread(target=consumer, daemon=True).start()

q.join() # 等所有任务完成

✅ 优点:
• 自动线程安全;
• 支持阻塞/非阻塞;
• 自带 join / task_done 协调机制;
• 可实现多生产者、多消费者模型。

2. Event — 信号通知机制

Event 是一种线程间事件信号:
一个线程等待事件,另一个线程触发事件。

示例

import threading, time
event = threading.Event()
def worker():
print("子线程等待信号...")
event.wait()          # 阻塞,直到被 set()
print("收到信号,继续执行!")
t = threading.Thread(target=worker)
t.start()
time.sleep(2)
print("主线程发信号")
event.set()               # 唤醒 worker
t.join()

✅ 优点:
• 实现线程之间的同步信号;
• 适合“启动/暂停/终止”等场景;
• 不需要共享数据。

3. Condition — 条件变量(适合复杂等待)

用于复杂的同步条件,比如:等待“队列非空”或“资源可用”。

示例

import threading, time
cond = threading.Condition()
data = []
def producer():
with cond:
print("生产者:准备数据")
data.append("任务数据")
cond.notify()  # 唤醒等待的消费者
def consumer():
with cond:
print("消费者:等待数据")
cond.wait()    # 等待 notify()
print("消费者:获取数据", data.pop())
threading.Thread(target=consumer).start()
time.sleep(1)
threading.Thread(target=producer).start()

✅ 特点:
• 可精确控制等待条件;
• 可配合多个线程使用;
• 是更底层的同步机制。

4. Lock / RLock — 最基础的同步方式

用于保护共享资源,防止并发修改冲突。

示例

import threading, time
lock = threading.Lock()
counter = 0
def worker():
global counter
for _ in range(100000):
with lock:
counter += 1
threads = [threading.Thread(target=worker) for _ in range(5)]
[t.start() for t in threads]
[t.join() for t in threads]
print("最终结果:", counter)

如果没有锁保护,多线程同时修改 counter,结果会错误。

✅ 区别:
• Lock:普通互斥锁;
• RLock:可重入锁(允许同一线程重复获得)。

5. Semaphore — 控制并发数量

类似计数锁,可用于限制并发资源访问数量。

示例

import threading, time
sem = threading.Semaphore(3)  # 最多允许3个线程同时执行
def worker(i):
with sem:
print(f"线程 {i} 开始")
time.sleep(2)
print(f"线程 {i} 结束")
for i in range(8):
threading.Thread(target=worker, args=(i,)).start()

✅ 应用:
• 限制数据库连接数;
• 控制文件下载并发数。

6. 全局变量(不推荐直接用)

线程共享全局变量,但需要 锁保护。

示例

import threading
shared_data = 0
lock = threading.Lock()
def add():
global shared_data
for _ in range(100000):
with lock:
shared_data += 1
threads = [threading.Thread(target=add) for _ in range(5)]
[t.start() for t in threads]
[t.join() for t in threads]
print("结果:", shared_data)

7. Future / ThreadPoolExecutor(现代线程通信)

Python 的 concurrent.futures 封装了线程池和异步返回结果机制(Future 对象)。

示例

from concurrent.futures import ThreadPoolExecutor, as_completed
import time

def task(x):
time.sleep(1)
return x * x

with ThreadPoolExecutor(max_workers=4) as executor:
futures = [executor.submit(task, i) for i in range(6)]
for f in as_completed(futures):
print(“结果:”, f.result())

✅ 优点:
• 自带队列与锁;
• 线程安全;
• 结果异步返回(Future.result())。

四、性能与适用场景对比

请添加图片描述

五、线程间通信的设计建议
1. ✅ 优先使用 Queue:最稳定、线程安全、简单。
2. ⚠️ 全局变量必须加锁:否则容易出现竞争条件。
3. 不要过度使用锁:过多锁会导致死锁、性能下降。
4. I/O 密集用多线程,CPU 密集用多进程。
5. 复杂同步逻辑用 Event / Condition 实现。
6. 任务分发场景可用 ThreadPoolExecutor。

✅ 六、总结对比表
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/960331.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年比较好的有机生态红茶批发销售

2025年有机生态红茶批发市场趋势与优质供应商推荐 行业背景与市场趋势 随着全球健康消费意识升级,有机生态红茶市场正迎来爆发式增长。据《2024年中国茶叶消费白皮书》显示,2023年有机茶市场规模达78亿元,同比增…

Ubuntu 软件安装中心闪退

Bug 一、 软件安装中心闪退 information安装.dev包,需要用到apt-store的软件安装,但当软件安装中心窗口弹出后,过来三秒就会闪退;有可能是配置文件缓存损坏、系统或软件依赖问题、或权限设置不正确所致 版本:Ubun…

西部数据移动硬盘忘记密码怎么办

方法1:尝试查看密码提示 官网下载WD Security https://support-en.wd.com/app/products/downloads/softwaredownloads下载后双击exe文件安装安装电脑桌面会有该应用的图标,点击后打开方法2:清空硬盘 官网下载WD Dri…

2025年质量好的刺绣布袋定制厂家推荐及采购指南

2025年质量好的刺绣布袋定制厂家推荐及采购指南 行业背景与市场趋势 近年来,随着环保意识的提升和消费者对个性化产品的需求增长,刺绣布袋市场迎来快速发展。根据《2024年中国纺织行业市场分析报告》,全球环保袋市…

2025年第39周数字取证与事件响应技术动态汇总

本周技术动态涵盖Salesloft-Drift入侵事件分析、SaaS供应链攻击技术细节、新型恶意软件技术分析、数字取证工具更新、威胁检测技术实践等关键网络安全技术内容,为安全专业人员提供最新技术洞察。赞助内容 Salesloft-D…

2025年比较好的精酿啤酒机厂家最新推荐排行榜

2025年比较好的精酿啤酒机厂家最新推荐排行榜精酿啤酒行业背景与市场趋势近年来,随着消费者对啤酒品质和个性化需求的不断提升,精酿啤酒市场迎来了爆发式增长。根据中国酒业协会发布的数据显示,2024年中国精酿啤酒市…

Linux misfit task

在 Linux 内核中,“misfit task” 是调度器(scheduler)中的一个术语,用来描述任务(task)与 CPU 性能等级不匹配的情况。 这个概念主要出现在 EAS(Energy Aware Scheduling)/schedutil 等现代调度框架中,用于优…

JavaSE----- 流程控制

JavaSE----- 流程控制JavaSE流程控制1.用户交互Scanner基本语法:Scanner s = nwe Scaneer(System.in); 通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取之前一般使用hasNext()与hasNextLine()判断是…

李宏毅机器学习笔记20 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

性能监测火焰图原理及搭建

性能监测火焰图原理及搭建2025-11-09 10:56 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; f…

基于Java的车辆租赁管理平台/租车系统源码+运行步骤

功能介绍 平台采用B/S结构,后端采用主流的Springboot框架进行开发,前端采用主流的Vue.js进行开发。这是一个前后端分离项目,需要提前学习相关技术。努力吧少年 整个平台包括前台和后台两个部分。前台功能包括:首页…

2025年优秀的郑州注册公司高评分服务推荐

2025年优秀的郑州注册公司高评分服务推荐行业背景与市场趋势近年来,随着"放管服"改革深入推进和营商环境持续优化,郑州市场主体数量呈现爆发式增长。根据河南省市场监管局最新数据,2024年上半年郑州市新增…

实用指南:【Java】P15 Java 深入理解 “this” 关键字

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年服务贴心的离婚财产分割律师口碑指数榜

2025年服务贴心的离婚财产分割律师口碑指数榜行业背景与市场趋势随着我国离婚率的持续攀升,离婚财产分割法律服务需求呈现爆发式增长。根据民政部最新统计数据,2024年全国离婚登记数量达到478.6万对,同比增长6.8%,…

php项目出现提示 no input file specified的解决方法集锦

问题分析与解决方案集锦 当PHP项目访问出现 "No input file specified" 错误且存在 .user.ini 文件时,核心问题是该文件中的配置指令干扰了PHP的正常执行。请按以下顺序排查: 第一步:快速锁定问题源临时重…

2025年靠谱的白水苹果精品推荐厂家

2025年靠谱的白水苹果精品推荐厂家白水苹果产业概况与市场趋势白水县作为中国西北地区重要的苹果生产基地,凭借其独特的地理环境和气候条件,已成为"世界最佳苹果优生区"之一。根据中国果品流通协会2024年发…

2025年诚信的建筑业体系认证管理体系认证专家推荐榜

2025年诚信的建筑业体系认证管理体系认证专家推荐榜行业背景与市场趋势随着中国建筑业的持续发展和规范化进程加速,行业对质量管理体系认证的需求呈现爆发式增长。根据中国建筑业协会最新发布的《2024年中国建筑行业发…

20251109-2

我才发现我这碰撞检测写的简直是一坨屎,稍微优化了一下,虽然依旧一坨屎。<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewpor…

深入解析:让AI说“人话“:TypeChat.NET如何用强类型驯服大语言模型的“野性“

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年评价高的专利评估综合口碑榜

2025年评价高的专利评估综合口碑榜行业背景与市场趋势随着全球科技创新步伐加快,知识产权已成为企业核心竞争力的重要组成部分。根据世界知识产权组织(WIPO)最新数据显示,2024年全球专利申请量达到380万件,同比增…