Python中的多进程是什么?如何使用多进程?代码举例讲解

Python中的多进程是指在同一时刻启动多个进程来执行任务,可以利用多核CPU的优势提高程序的运行效率。

Python提供了两个主要的多进程模块:

1. multiprocessing:

  • multiprocessing是Python标准库中的多进程模块。
  • 它提供了一个Process类来代表一个进程对象。
  • 用法:
from multiprocessing import Process

def func(name):
    print(f'Hello from {name}')

if __name__ == '__main__':
    p1 = Process(target=func, args=('Bob',))
    p2 = Process(target=func, args=('Alice',))
    p1.start()
    p2.start()

这会启动两个进程,并打印:

Hello from Bob 
Hello from Alice

2. concurrent.futures:

  • concurrent.futures提供了高层的异步执行接口。
  • 它可以使用ThreadPoolExecutor和ProcessPoolExecutor两个执行器实现多进程。
  • 用法:
from concurrent.futures import ProcessPoolExecutor

if __name__ == '__main__':
    with ProcessPoolExecutor(max_workers=2) as executor:
        executor.map(func, ['Bob', 'Alice'])

这也会启动两个进程并打印相同结果。

所以,Python的多进程模块可以轻松地启动多进程来提高CPU利用效率和程序运行速度。需要注意的是:

  1. 多进程只能在Unix/Linux/Mac系统有效,Windows不支持多进程。
  2. 多进程中 Each process has its own GIL,可以绕过Python的GIL限制,利用多核CPU。
  3. 多进程要避免共享资源来防止锁竞争,可以使用Queue.Pipes等来通信。
  4. 要将if name == ‘main‘条件判断逻辑装入模块中,这样可以防止模块被误入多次。