Python多进程机制实例详解

  • Post category:Python

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中多进程机制的实例和应用,涉及到创建进程的方法、进程间的通信方式以及多进程的应用场景。