编程学习网 > 编程语言 > Python > multiprocessing,一个直观的python项目!
2026
06-11

multiprocessing,一个直观的python项目!


multiprocessing Python 绕过 GIL(全局解释器锁)实现真并行的利器,特别适合 CPU 密集型任务。今天我们就从实战出发,拆解这个模块的核心用法,看看它为什么能让你的 Python 代码直接起飞!

一、基础进程的创建与启动

多进程最直观的应用就是同时执行多个独立任务。

当你有多个不相干的计算要处理时,让它们各自为政是最聪明的做法。

from multiprocessing import Process
import os
def task(name):
    # 获取当前进程的ID
    pid = os.getpid()
    print(f"任务 {name} 正在进程 {pid} 中执行")
if __name__ == "__main__":
    p1 = Process(target=task, args=("A",))
    p2 = Process(target=task, args=("B",))
    p1.start()
    p2.start()
    p1.join()
    p2.join()

上面这段代码创建了两个独立的子进程,它们会并发执行。

start() 方法让进程开始运行,join() 则是告诉主进程耐心等待子进程完成后再继续。

运行输出示例:

任务 A 正在进程 12345 中执行
任务 B 正在进程 12346 中执行

二、进程池的高效管理

实际开发中,我们很少逐个创建进程,而是使用进程池来管理。

就像一个餐厅有固定数量的厨师,来多少订单都能从容应对。

from multiprocessing import Pool
def calculate_square(n):
    return n * n
if __name__ == "__main__":
    with Pool(processes=4) as pool:
        numbers = [1, 2, 3, 4, 5, 6, 7, 8]
        results = pool.map(calculate_square, numbers)
        print(results)

Pool 对象创建了一个包含 4 个工作进程的池子,map 方法会自动把列表中的数字分配给空闲进程去计算平方。

运行输出:

[1, 4, 9, 16, 25, 36, 49, 64]

三、进程间通信之队列

进程之间内存是隔离的,不能像线程那样共享变量。

这时候就需要队列这个快递小哥来帮忙传递消息了。

from multiprocessing import Process, Queue
def producer(q):
    q.put("Hello")
    q.put("World")
if __name__ == "__main__":
    q = Queue()
    p = Process(target=producer, args=(q,))
    p.start()
    p.join()
    
    print(q.get())
    print(q.get())

生产者进程把数据放进队列,主进程再从队列里取出来。

队列是线程和进程安全的,完全不用担心数据混乱。

运行输出:

Hello
World

四、共享内存的妙用

当你需要在进程间共享简单数据时,Value Array 能派上用场。

它们直接使用共享内存,比队列快得多。

from multiprocessing import Process, Value
import time
defcounter(shared_val):
    for _ inrange(1000):
        shared_val.value += 1
if __name__ == "__main__":
    num = Value('i', 0)  # 'i' 表示整数类型
    processes = []
    
    for _ inrange(4):
        p = Process(target=counter, args=(num,))
        processes.append(p)
        p.start()
    
    for p in processes:
        p.join()
    
    print(f"最终计数{num.value}")

四个进程同时对同一个共享整数做累加操作。

执行结果会因为竞态条件而不确定,这正是共享数据需要加锁的原因。

运行输出(每次都可能不同):

最终计数: 2847

五、多进程 vs 多线程

对比线程,多进程的最大优势是完全绕过了 GIL 的限制。

在处理 CPU 密集型任务时,多进程能真正利用多核优势,而多线程因为 GIL 的存在只能交替执行。

但进程的创建开销更大,进程间通信也需要额外的序列化成本。

我的建议很直接:计算密集用进程,IO 密集用线程。

写在最后

multiprocessing Python 进阶路上绕不开的一座山。

它虽比 threading 重一些,但在数据处理、科学计算、图像处理这些场景下,带来的性能提升是实打实的。

纸上得来终觉浅,快打开你的编辑器敲一敲这些代码,亲自感受多核并行的威力。

以上就是“multiprocessing,一个直观的python项目!的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。 

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取