Python多进程机制实例详解
Python中可以通过multiprocessing
模块来实现进程的创建和管理,这一机制被称为多进程机制。下面将详细讲解Python多进程机制的实例和应用。
多进程的创建方法
Python提供了多种创建进程的方法,这里介绍常用的两种方法:继承Process
类和使用进程池。
继承Process类创建进程
以下是创建一个新进程并执行任务的示例代码:
import multiprocessing
class MyProcess(multiprocessing.Process):
def __init__(self, arg):
super(MyProcess, self).__init__()
self.arg = arg
def run(self):
print('arg =', self.arg)
if __name__ == '__main__':
p = MyProcess('hello')
p.start()
p.join()
这里定义了一个MyProcess
类,继承了Process
类并实现了run()
方法,run()
方法是进程开始执行的入口。在主程序中创建MyProcess
的实例并调用start()
方法启动新进程,调用join()
方法等待新进程执行结束。
使用进程池创建进程
以下是使用Pool
类创建进程池并执行多个任务的示例代码:
import multiprocessing
def func(i):
print('func', i)
if __name__ == '__main__':
pool = multiprocessing.Pool(5)
for i in range(10):
pool.apply_async(func, args=(i,))
pool.close()
pool.join()
这里首先创建了一个包含5个进程的进程池,并循环执行了10次调用func()
方法的任务,通过apply_async()
方法提交任务给进程池异步执行,最后调用close()
方法和join()
方法等待任务全部执行完毕。
进程间的通信
多个进程之间通信的方式主要有两种:队列和管道。
使用队列通信
以下是使用队列在多个进程之间传递数据的示例代码:
import multiprocessing
def write(q):
for value in ['A', 'B', 'C']:
q.put(value)
def read(q):
while True:
value = q.get(True)
print('get value:', value)
if __name__ == '__main__':
q = multiprocessing.Queue()
pw = multiprocessing.Process(target=write, args=(q,))
pr = multiprocessing.Process(target=read, args=(q,))
pw.start()
pr.start()
pw.join()
pr.terminate()
这里定义了两个进程函数write()
和read()
,前者往队列中写入数据,后者从队列中读取数据并打印到控制台上。在主程序中创建了一个队列实例并传入进程函数,创建两个进程调用start()
方法启动,调用join()
方法等待写入进程的结束。
使用管道通信
以下是使用管道在两个进程之间传递数据的示例代码:
import multiprocessing
def send(conn, data):
conn.send(data)
conn.close()
if __name__ == '__main__':
parent_conn, child_conn = multiprocessing.Pipe()
p = multiprocessing.Process(target=send, args=(child_conn, 'Hello, World!'))
p.start()
print(parent_conn.recv())
p.join()
这里创建了一个管道实例,并创建一个新进程向管道写入数据,然后调用recv()
方法从管道读取数据并打印到控制台上。注意要在子进程中关闭管道的一端,否则会出现死锁的情况。join()
方法等待新进程执行结束。
多进程的应用场景
多进程机制在以下场景中有着广泛的应用:
- 网络爬虫:多个进程同时进行数据爬取,效率更高。
- 图像处理:多进程同时处理图片,效率更高。
- 并发编程:利用多进程机制实现并发编程,提高应用程序的效率。
这里就详细介绍了Python中多进程机制的实例和应用,涉及到创建进程的方法、进程间的通信方式以及多进程的应用场景。