Python面试题:在 Python 中,如何使用 multiprocessing 模块?

在 Python 中,multiprocessing 模块提供了一种方式来创建并管理多个进程,以实现并行计算。以下是使用 multiprocessing 模块的一些关键概念和示例。

基本概念

  1. Process:创建和管理进程的类。
  2. Queue:进程间通信的安全队列。
  3. Pool:进程池,可以方便地管理多个进程。
  4. Lock:提供锁机制,避免竞争条件。
  5. Manager:提供共享内存的进程间通信。

示例

创建和启动进程

使用 Process 类创建并启动进程。

python 复制代码
from multiprocessing import Process
import os

def worker_function(name):
    print(f"Worker {name} is running with process id: {os.getpid()}")

if __name__ == "__main__":
    processes = []
    
    for i in range(5):
        p = Process(target=worker_function, args=(i,))
        processes.append(p)
        p.start()
    
    for p in processes:
        p.join()  # 等待所有进程完成
使用 Queue 进行进程间通信

Queue 可以在进程之间安全地传递数据。

python 复制代码
from multiprocessing import Process, Queue

def worker_function(q):
    q.put("Data from worker")

if __name__ == "__main__":
    q = Queue()
    p = Process(target=worker_function, args=(q,))
    p.start()
    print(q.get())  # 获取从子进程传来的数据
    p.join()
使用 Pool 管理进程池

Pool 对象允许你管理一个进程池,并将任务分配给这些进程。

python 复制代码
from multiprocessing import Pool

def worker_function(x):
    return x * x

if __name__ == "__main__":
    with Pool(5) as p:
        results = p.map(worker_function, range(10))
    print(results)
使用 Lock 避免竞争条件

Lock 可以确保只有一个进程可以访问共享资源。

python 复制代码
from multiprocessing import Process, Lock
import os

def worker_function(lock, name):
    with lock:
        print(f"Worker {name} is running with process id: {os.getpid()}")

if __name__ == "__main__":
    lock = Lock()
    processes = []
    
    for i in range(5):
        p = Process(target=worker_function, args=(lock, i))
        processes.append(p)
        p.start()
    
    for p in processes:
        p.join()
使用 Manager 共享数据

Manager 可以创建共享数据,如列表、字典等。

python 复制代码
from multiprocessing import Process, Manager

def worker_function(shared_list, index, value):
    shared_list[index] = value

if __name__ == "__main__":
    with Manager() as manager:
        shared_list = manager.list([0] * 5)
        processes = []
        
        for i in range(5):
            p = Process(target=worker_function, args=(shared_list, i, i*i))
            processes.append(p)
            p.start()
        
        for p in processes:
            p.join()
        
        print(shared_list)

总结

通过 multiprocessing 模块,Python 提供了强大的工具来创建和管理多进程程序,从而提高计算性能和效率。以上示例展示了如何使用 multiprocessing 模块的基本功能,如创建进程、进程间通信、进程池管理、使用锁避免竞争条件以及共享数据。根据具体需求,可以选择合适的工具来实现并行计算。

相关推荐
THMAIL2 分钟前
深度学习从入门到精通 - 神经网络核心原理:从生物神经元到数学模型蜕变
人工智能·python·深度学习·神经网络·算法·机器学习·逻辑回归
野犬寒鸦7 分钟前
力扣hot100:旋转图像(48)(详细图解以及核心思路剖析)
java·数据结构·后端·算法·leetcode
七夜zippoe15 分钟前
AI+Java 守护你的钱袋子!金融领域的智能风控与极速交易
java·人工智能·金融
岁忧28 分钟前
(LeetCode 面试经典 150 题) 200. 岛屿数量(深度优先搜索dfs || 广度优先搜索bfs)
java·c++·leetcode·面试·go·深度优先
dbdr090128 分钟前
Linux 入门到精通,真的不用背命令!零基础小白靠「场景化学习法」,3 个月拿下运维 offer,第二十六天
linux·运维·服务器·网络·python·学习
花花无缺33 分钟前
python自动化-pytest-用例发现规则和要求
后端·python
群联云防护小杜1 小时前
服务器异常磁盘写排查手册 · 已删除文件句柄篇
运维·服务器·nginx·开源·lua
YUELEI1181 小时前
langchain 提示模版 PromptTemplate
python·langchain
liliangcsdn1 小时前
结合prompt分析NodeRAG的build过程
java·服务器·人工智能·数据分析·知识图谱
东方不败之鸭梨的测试笔记1 小时前
LangChain: Models, Prompts 模型和提示词
人工智能·python·langchain