
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教程欢迎持续关注编程学习网。
扫码二维码 获取免费视频学习资料

- 本文固定链接: http://phpxs.com/post/14220/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料