page contents

Python 库手册:multiprocessing 多进程模块!

multiprocessing 是 Python 标准库中用于实现多进程并发的模块,它提供了与 threading 模块相似的接口,但每个进程拥有独立的 Python 解释器和内存空间,能够突破 GIL(全局解释器锁)的限制,真正实现多核 CPU 的并行计算。

attachments-2025-07-rIJSAcU66882de3e99e97.jpgmultiprocessing 是 Python 标准库中用于实现多进程并发的模块,它提供了与 threading 模块相似的接口,但每个进程拥有独立的 Python 解释器和内存空间,能够突破 GIL(全局解释器锁)的限制,真正实现多核 CPU 的并行计算。

该模块适用于 CPU 密集型任务,如大规模数据处理、图像处理、科学计算等,是构建高性能并行程序的重要工具。

常见应用场景:

(1)并行处理多个大文件或图像。

(2)处理密集型计算任务(如数值模拟、加密解密)。

(3)实现多进程服务器或爬虫。

(4)替代线程以实现多核并行加速。

核心概念

1、Process

每个子进程都是独立的,拥有自己的内存空间,运行指定的函数。

2、Pool

进程池,用于管理大量进程,避免资源耗尽。

3、Queue / Pipe

进程间通信工具,用于交换数据。

4、Manager

提供共享数据结构(如列表、字典),用于跨进程共享状态。

5、Lock / Semaphore

用于多进程间同步,防止竞争条件。

应用举例

例 1:启动子进程执行函数

from multiprocessing import Process

def say_hello(name):

    print(f"Hello, {name}")

if __name__ == '__main__':

    p = Process(target=say_hello, args=('World',))

    p.start()

    p.join()

例 2:使用进程池执行多个任务

from multiprocessing import Pool

def square(x):

    return x * x

if __name__ == '__main__':

    with Pool(4) as pool:

        results = pool.map(square, range(10))

        print(results)

例 3:使用 Queue 在进程间传递数据

from multiprocessing import Process, Queue

def worker(q):

    q.put("Message from child")

if __name__ == '__main__':

    q = Queue()

    p = Process(target=worker, args=(q,))

    p.start()

    print(q.get())

    p.join()

例 4:使用 Manager 共享列表

from multiprocessing import Process, Manager

def worker(shared_list):

    shared_list.append(100)

if __name__ == '__main__':

    with Manager() as manager:

        l = manager.list()

        p = Process(target=worker, args=(l,))

        p.start()

        p.join()

        print(l)

例 5:使用 Lock 控制访问

from multiprocessing import Process, Lock

def worker(lock, i):

    with lock:

        print(f'Process {i} is writing')

if __name__ == '__main__':

    lock = Lock()

    for i in range(3):

        Process(target=worker, args=(lock, i)).start()

常用函数与类速览

current_process()

返回当前正在运行的 Process 对象。

参数:无

返回:当前 multiprocessing.Process 实例

Lock()

返回一个进程间互斥锁对象。

参数:无

返回:Lock 实例,可用于控制多个进程对共享资源的访问

Manager()

创建一个可以在进程间共享的服务进程,生成共享对象如 list、dict。

参数:无

返回:管理器对象,支持创建共享数据结构

Pipe([duplex=True])

创建一个连接的管道对,用于双向通信。

参数:

duplex: 默认为 True,表示双向通信

返回:一个 (conn1, conn2) 元组,用于通信的两个连接对象

Pool([processes])

创建一个进程池,可并发处理多个任务。

参数:

processes: 最大进程数,默认与 CPU 数相等

常用方法:

map(func, iterable):并行映射函数

apply(func, args):执行单个任务

close() / join():关闭并等待进程结束

Process(target, args=(), kwargs={})

创建一个进程对象来运行指定函数。

参数:

target: 目标函数

args: 位置参数元组

kwargs: 关键字参数字典

常用方法:

start():启动进程

join():等待进程结束

terminate():强制终止

Queue([maxsize])

创建进程间通信的队列。

参数:可选的最大长度

常用方法:

put(obj):放入对象

get():取出对象

补充说明

1、Windows 与 Linux 的差异

在 Windows 上必须将主入口写在 if __name__ == '__main__': 语句下,否则子进程会无限递归启动自身。

2、进程开销

相比线程,进程启动与内存消耗更大,不适合轻量级并发任务。

3、调试建议

可结合 logging 模块记录日志,避免多进程下 print 输出错乱。

4、安全终止

尽量使用 join() 正常结束,不推荐频繁使用 terminate()。

在并发任务开发中,multiprocessing 是实现高性能并行计算的重要工具,尤其适合利用多核 CPU 加速 Python 程序的运行效率。结合 concurrent.futures.ProcessPoolExecutor 还可实现更高级的接口封装。

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2025-07-25 09:30
  • 阅读 ( 39 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
小柒
小柒

2172 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 2172 文章
  3. Pack 1335 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章