看langchain代码之前必备知识之 - Python 多进程: multiprocessing (1)


前言

之前,我们讲了python的协程,在langchain的代码里面,同时运用了python的多进程(如下面两张图)。我们一块来学习一下python的协程,同时,对比下多进程和协程的区别,以及他们的运用场景。
在这里插入图片描述
在这里插入图片描述

一、Python多进程示例

Python的multiprocessing模块提供了Process类,用于创建和管理进程。通过使用Process,我们可以在Python中实现多进程编程。

下面是Process的用法和一个示例:

  1. 导入Process类:
from multiprocessing import Process
  1. 定义一个函数作为进程的任务:
def task(name):
    print('Hello', name)
  1. 创建Process对象,指定任务和参数:
p = Process(target=task, args=('Alice',))
  1. 启动进程:
p.start()
  1. 等待进程执行结束:
p.join()

完整示例代码如下:

from multiprocessing import Process
from time import sleep


def task(name):
    print(name + ' start')
    sleep(5)

if __name__ == '__main__':
    p = Process(target=task, args=('Job1',))
    p2 = Process(target=task, args=('Job2',))
    p3 = Process(target=task, args=('Job3',))
    p.start()
    p2.start()
    p3.start()

    p.join()
    p2.join()
    p3.join()

运行上述代码,将会创建三个新的进程,这三进程会同时执行task函数,结果如下。要注意的是,虽然每个子进程都会执行5秒钟,但是这3行输出是 一瞬间就打印出来了。说明他们是同时执行的。
在这里插入图片描述

二、multiprocessing 简介

multiprocessing 是 Python 的一个模块,用于实现进程间通信和并发执行。它提供了一个类似于 threading 模块的接口,但是使用进程而不是线程。通过 multiprocessing,可以并行执行多个任务,提高程序的性能。

multiprocessing 提供了一些类和函数,可以方便地创建和管理进程。其中最常用的类是 Process 类,可以用来创建一个新的进程。通过创建多个 Process,可以并行执行多个任务。除了 Process 类,multiprocessing 还提供了 Queue、Pipe、Lock、Event 等类和函数,用于实现进程间通信和同步操作。

与多线程相比,多进程具有更好的稳定性和安全性,因为进程之间有独立的内存空间,不会共享数据。另外,使用多进程编程可以利用多核处理器的优势,提高程序的执行效率。然而,与多线程相比,多进程的创建和切换开销较大,所以在一些场景下,多线程可能更适合。

总之,multiprocessing 模块是 Python 中用于实现进程间通信和并发执行的工具,可以用于提高程序的性能和利用多核处理器的优势。

三、Python中的多进程和协程的区别和使用场景

Python中的多进程和协程都是用于实现并发编程的工具,但推荐使用的场景是不同的。

推荐使用多进程的情况:

  • 当任务之间有明显的独立性,可以并行执行而不需要共享数据时,使用多进程可以获得更好的性能。例如,计算密集型的任务,如图像处理、科学计算等。
  • 当需要利用多核处理器的优势时,使用多进程可以将不同的任务分配到不同的进程中,充分利用多核处理器的能力。

推荐使用协程的情况:

  • 当存在大量的IO密集型任务时,使用协程可以在遇到IO阻塞时切换到其他任务,充分利用CPU的资源。例如,网络爬虫、Web服务器等。
  • 当任务之间需要共享数据或状态时,可以使用协程来避免多进程中的数据同步和通信的复杂性。

需要注意的是,Python中的协程通过使用生成器和async/await关键字来实现,例如使用asyncio模块。而多进程可以使用multiprocessing模块来实现。选择使用哪种并发编程工具,取决于具体的任务需求和性能优化的目标。

总结

我们今天初步了解了python的多进程,大家可以去回顾下langchain的代码,看看是否能顺利阅读了。
下一篇文章,我们将一块学习python多进程直接如何通信

  • 54
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值