前言
之前,我们讲了python的协程,在langchain的代码里面,同时运用了python的多进程(如下面两张图)。我们一块来学习一下python的协程,同时,对比下多进程和协程的区别,以及他们的运用场景。
一、Python多进程示例
Python的multiprocessing
模块提供了Process
类,用于创建和管理进程。通过使用Process
,我们可以在Python中实现多进程编程。
下面是Process
的用法和一个示例:
- 导入
Process
类:
from multiprocessing import Process
- 定义一个函数作为进程的任务:
def task(name):
print('Hello', name)
- 创建
Process
对象,指定任务和参数:
p = Process(target=task, args=('Alice',))
- 启动进程:
p.start()
- 等待进程执行结束:
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多进程直接如何通信