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()方法启动线程;
- 等待线程结束:使