Python多进程中的数据隔离

Python 多进程(multiprocessing)中,子进程会完全复制主进程的内存数据,但是进程之间的变量、数据是完全独立、互不干扰的------ 修改一个进程里的数据,绝对不会影响其他进程。

这是进程和线程最大的区别:

  • 多线程:共享同一块内存,数据会互相影响,需要加锁
  • 多进程:内存完全隔离,数据独立,天然安全

进程拥有独立的内存空间

每个进程都有自己独立的栈、堆、全局数据区,互不共享。

如果需要进程间通信(共享数据)

既然默认隔离,那想让进程之间传递数据 / 共享数据,就必须用专门的机制

常用共享 / 通信方式

方式 用途
Queue 队列 进程间安全传递数据(最常用)
Pipe 管道 两个进程间双向通信
Value / Array 共享简单数值 / 数组
Manager 共享列表、字典等复杂对象
共享内存 高性能大数据共享

注意:Windows 没有 fork 机制,Python 多进程只能靠「重新导入模块」创建子进程,模块顶层所有代码、全局变量、函数、类都会被完整加载复制,跟主进程一样;
只有 if __name__ == '__main__' 内部代码不会在子进程执行。
(因为子进程的name不是main)

Python多进程执行时序

  1. 程序启动,先从头到尾执行整个 py 文件
    运行所有 if __name__ == '__main__' 外面的代码:全局变量定义、函数定义、顶层打印、赋值语句......
  2. 执行到 if __name__ == '__main__' 内部
    创建进程对象 Process()
  3. 调用 p.start() → 唤醒子进程
  4. 子进程内部:再次先跑一遍本文件所有 main 外语句
  5. 跑完所有外层语句后,才开始执行你绑定的子进程函数
相关推荐
zzzzzz3106 小时前
当产品经理说这个很简单:我用Python自动化处理奇葩需求的实战指南
python·pycharm·产品经理
雪隐6 小时前
个人电脑玩AI-06让5060 Ti给你打工——不光能画画,Qwen3-TTS还能学人说话,连我老板都信了!
人工智能·后端·python
兵慌码乱18 小时前
面向桌面端的资产管理系统分层架构设计与核心模块实现
python·系统架构·sqlite·pyqt5·数据库设计·桌面应用开发·mvc架构
hboot19 小时前
AI工程师第三课 - 机器学习基础
python·scikit-learn·kaggle
顾林海1 天前
Agent入门阶段-编程基础-Python:流程控制
python·agent·ai编程
呱呱复呱呱1 天前
Django CBV 源码解读:一个请求是怎么找到你的 get() 方法的
python·django
曲幽1 天前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict
荣码1 天前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
兵慌码乱2 天前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
金銀銅鐵2 天前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学