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利用效率和程序运行速度。需要注意的是:
- 多进程只能在Unix/Linux/Mac系统有效,Windows不支持多进程。
- 多进程中 Each process has its own GIL,可以绕过Python的GIL限制,利用多核CPU。
- 多进程要避免共享资源来防止锁竞争,可以使用Queue.Pipes等来通信。
- 要将if name == ‘main‘条件判断逻辑装入模块中,这样可以防止模块被误入多次。