Python 多进程编程入门 零基础详解

原始人用心编程 2026-04-29 22:49:45

一、前言

上一篇我们学完了多线程,知道 Python 因为GIL 全局解释器锁,多线程没法利用多核 CPU 做密集计算。想要真正并行跑程序、利用多核性能,就要用多进程

二、多进程和多线程区别

  1. 线程:共享同一块内存,轻量,适合 IO 等待
  2. 进程:每个进程独立内存空间,互不干扰,能利用多核 CPU
  3. CPU 密集型计算 → 用多进程
  4. 网络请求、文件读写 → 用多线程

三、导入模块

import multiprocessing
import time

四、创建子进程(函数方式)

用法和多线程很像,直接套用就行:

import multiprocessing
import time

def work(name):
    print(f"子进程 {name} 开始运行")
    time.sleep(2)
    print(f"子进程 {name} 运行结束")

if __name__ == "__main__":
    p1 = multiprocessing.Process(target=work, args=("进程1",))
    p2 = multiprocessing.Process(target=work, args=("进程2",))

    p1.start()
    p2.start()

    p1.join()
    p2.join()
    print("所有进程执行完毕")

注意:Windows 系统必须写 if __name__ == "__main__":

五、进程之间数据隔离

进程不共享全局变量,各自有独立内存:

import multiprocessing

num = 100

def change():
    global num
    num = 999
    print("子进程num:", num)

if __name__ == "__main__":
    p = multiprocessing.Process(target=change)
    p.start()
    p.join()

    print("主进程num:", num)

运行结果:主进程还是 100,子进程改不动主进程数据。

六、自定义类创建进程

继承 multiprocessing.Process,重写 run 方法:

import multiprocessing
import time

class MyProcess(multiprocessing.Process):
    def __init__(self, name):
        super().__init__()
        self.name = name

    def run(self):
        print(f"自定义进程 {self.name} 启动")
        time.sleep(1.5)
        print(f"自定义进程 {self.name} 结束")

if __name__ == "__main__":
    p1 = MyProcess("A")
    p2 = MyProcess("B")
    p1.start()
    p2.start()

七、进程池 Pool(批量处理任务)

任务数量多的时候,不用手动创建一堆进程,用进程池自动管理:

import multiprocessing
import time

def task(num):
    print(f"任务 {num} 执行中")
    time.sleep(1)
    return num * num

if __name__ == "__main__":
    # 创建容量为3的进程池
    pool = multiprocessing.Pool(3)

    # 批量提交任务
    result = pool.map(task, range(1,7))
    print("任务结果:", result)

    pool.close()
    pool.join()

八、进程间通信 Queue

进程默认隔离,想用队列互相传数据:

import multiprocessing

def put_data(q):
    # 子进程放数据
    q.put("Hello 多进程")

def get_data(q):
    # 子进程取数据
    print("收到消息:", q.get())

if __name__ == "__main__":
    # 创建队列
    q = multiprocessing.Queue()

    p1 = multiprocessing.Process(target=put_data, args=(q,))
    p2 = multiprocessing.Process(target=get_data, args=(q,))

    p1.start()
    p2.start()
    p1.join()
    p2.join()

九、总结与学习心得

本篇系统学习了 Python 多进程核心知识点:进程与线程区别、进程创建两种方式、进程数据隔离、进程池、队列通信 Queue。

多进程最大优势是绕过 GIL 锁,利用多核 CPU,适合大数据计算、视频处理、批量压缩、复杂运算等场景。

...全文
29 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
  • 举报
回复
@原始人用心编程

151

社区成员

发帖
与我相关
我的任务
社区描述
这里专为新疆政法学院的探索者而建,英雄不问出处。起跑线是起点,热忱与坚持为加速器,无论bug缠身的项目,还是攻克的算法顿悟,每滴汗水皆被珍藏。执炬前行,终将照亮彼此峰顶,我们携手同行。
课程设计笔记经验分享 高校 新疆·图木舒克市
社区管理员
  • 雲中203
  • SHAO060706
  • 三叶草.
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

英雄不问出处

试试用AI创作助手写篇文章吧