python入门系列十四(多进程)

1.引言

刚刚学完python的多线程编程内容,怎么还需要多进程呢?都是并行提升应用处理性能的方案。

这里不得不再次说起python的全局解释器锁GIL的存在,它要求同一时刻只能有一个线程执行python字节码,如果是I/O密集型的任务,这没有问题!当一个线程在待等I/O的时间可以切换另外一个线程执行。但如果是CPU密集型任务,那就只能靠多进程方案了。

选择多进程方案理由,有这么几个:

  • CPU密集型任务,比如数学计算,图像处理
  • 充分利用多核CPU,让每个进程独立使用CPU核心
  • 提供应用稳定性,每个进程都有自己的独立空间,单个进程崩溃不影响其它进程

当然,任何方案都有两面性,多进程方案有它的缺点,进程比起线程,要消耗更多资源。

2.多进程案例

2.1.入门案例

python中提供multiprocessing模块,支持多进程编程。

python 复制代码
import multiprocessing
import os

# 定义进程任务,模拟耗时计算
def task(name):
    print(f"子进程 {name} PID: {os.getpid()}")
    # 模拟耗时计算
    result = sum([i * i for i in range(1000000)])
    print(f"子进程 {name} 计算结果: {result}")

# 启动执行
if __name__ == '__main__':
    print(f"主进程 PID: {os.getpid()}")
    # 创建子进程,启动,等待执行完成
    p = multiprocessing.Process(target=task, args=("进程1",))
    p.start()
    p.join()

    print("所有进程执行完毕")

2.2.进程池

和线程池一样,本质是解决提升资源利用率的方案,相比较起来,进程要比线程消耗更多的资源,是一个重量级的方案。对于资源的复用更有实际意义。

python 复制代码
from multiprocessing import Pool
import time
import os

# 定义任务
def square(x):
    print(f"进程PID:{os.getpid()}执行计算任务 {x} 的平方")
    time.sleep(1)  # 模拟耗时操作
    return x * x

# 主函数
if __name__ == '__main__':
    with Pool(3) as pool:  # 创建3个进程的池
        numbers = [1, 2, 3, 4, 5]
        results = pool.map(square, numbers)

    print("计算结果:", results)

2.3.进程间通信

多任务并发处理,往往有彼此协作通信的需求,不管是多线程,还是多进程。多线程我们可以通过共享内存,多进程可以通过队列Queue方案。

生产者,消费者示例:

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

# 定义生产者任务
def produce(q):
    for i in range(5):
        q.put(f"产品:{i}")
        print(f"生产者 {os.getpid()}生产产品:{i}")

# 定义消费者
def consume(q):
    while True:
        item = q.get()
        if item is None:
            break
        print(f"消费者PID:{os.getpid()}消费{item}")

# 主函数
if __name__ == '__main__':
    q = Queue()

    producer = Process(target=produce, args=(q,))
    consumer = Process(target=consume, args=(q,))

    producer.start()
    consumer.start()

    producer.join()
    q.put(None)  # 发送结束信号
    consumer.join()
相关推荐
一点.点1 小时前
自动驾驶(ADAS)领域常用数据集介绍
人工智能·深度学习·机器学习·自动驾驶
智驱力人工智能1 小时前
夏季道路安全的AI革命:节省人力、提升效率
人工智能·安全·边缘计算·视觉算法·视觉分析·智能巡航·人工智能云计算
晓数3 小时前
“平价”微智码初尝试
人工智能·jetbrains
新加坡内哥谈技术3 小时前
MCP:人工智能时代的HTTP?探索AI通信新标准
人工智能·自然语言处理·chatgpt
老胖闲聊3 小时前
Python PyAutoGUI库【GUI 自动化库】深度解析与实战指南
python
0x2115 小时前
[论文阅读]REPLUG: Retrieval-Augmented Black-Box Language Models
论文阅读·人工智能·语言模型
GeekABC5 小时前
FastAPI系列06:FastAPI响应(Response)
开发语言·python·fastapi·web
fen_fen5 小时前
Python3:Jupyter Notebook 安装和配置
ide·python·jupyter
JOYCE_Leo166 小时前
一文详解卷积神经网络中的卷积层和池化层原理 !!
人工智能·深度学习·cnn·卷积神经网络
float_六七6 小时前
Python语言基础知识详解:分支结构控制语句
python