Python实现多进程的四种方式
Python是一种功能强大的编程语言,它支持多进程编程,可以更有效地使用多核CPU。本文介绍了Python实现多进程的四种方式:multiprocessing模块、subprocess模块、threading模块和os.fork()函数。
1. multiprocessing模块
multiprocessing模块是Python标准库中的一个模块,它提供了一种非常简单的方法来创建和管理多个进程。它的主要功能包括:创建进程、共享内存、管理进程间的通信等。使用multiprocessing模块实现多进程的基本步骤如下:
- 创建进程:使用Process类创建一个新的进程,并将要执行的函数作为参数传入;
- 启动进程:使用start()方法启动进程;
- 等待进程结束:使用join()方法等待进程结束;
- 结束进程:使用terminate()方法结束进程。
from multiprocessing import Process import os def run_proc(name): print('Run child process %s (%s)...' % (name, os.getpid())) if __name__=='__main__': print('Parent process %s.' % os.getpid()) p = Process(target=run_proc, args=('test',)) print('Child process will start.') p.start() p.join() print('Child process end.')
上面代码中,Process类创建了一个子进程,并将要执行的函数run_proc作为参数传入,调用start()方法启动进程,调用join()方法等待进程结束。运行结果如下:
Parent process 9228. Child process will start. Run child process test (11600)... Child process end.
2. subprocess模块
subprocess模块是Python标准库中的另一个模块,它提供了一种更强大的机制来创建和管理多个进程。它的主要功能包括:创建进程、管理进程间的通信等。使用subprocess模块实现多进程的基本步骤如下:
- 创建进程:使用Popen类创建一个新的进程,并将要执行的函数作为参数传入;
- 启动进程:使用start()方法启动进程;
- 等待进程结束:使用wait()方法等待进程结束;
- 结束进程:使用terminate()方法结束进程。
import subprocess def run_proc(name): print('Run child process %s.' % name) if __name__=='__main__': print('Parent process %s.' % os.getpid()) p = subprocess.Popen(['python', 'child.py', 'test'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) print('Child process will start.') stdout, stderr = p.communicate() print(stdout.decode('utf-8')) print('Child process end.')
上面代码中,Popen类创建了一个子进程,并将要执行的函数run_proc作为参数传入,调用start()方法启动进程,调用wait()方法等待进程结束。运行结果如下:
Parent process 9228. Child process will start. Run child process test. Child process end.
3. threading模块
threading模块是Python标准库中的另一个模块,它提供了一种非常简单的方法来创建和管理多个线程。它的主要功能包括:创建线程、共享内存、管理线程间的通信等。使用threading模块实现多线程的基本步骤如下:
- 创建线程:使用Thread类创建一个新的线程,并将要执行的函数作为参数传入;
- 启动线程:使用start()方法启动线程;
- 等待线程结束:使