作者: afenxi来源: afenxi时间:2017-01-09 12:33:17
本文由 Python 翻译组 最新翻译出品,原作者为 Michael Discroll,译者为 cystone,并由编程派作者 EarlGrey 校对。昨天,编程派已经发布了一篇多线程编程的教程,一文学会Python多线程编程。
译者简介:cystone, 成都信息工程大学,计算机学院学生。擅长领域:图像处理,机器学习。
多进程(multiprocessing)模块是在 Python 2.6 版本加入的。它最初由 Jesse Noller 和 Richard Oudkerk 在PEP 371 中定义。multiprocessing 模块生成进程的方式就和你使用 threading 模块生成线程是一样的。但是在这里,因为你使用的是多进程,所以你可以规避全局解释锁(GIL),充分利用机器多处理器的优势。
multiprocessing 模块还包含一些 threading 模块没有的一些 API。例如,有一个巧妙的 Pool 类可以让你通过多个输入并行执行一个函数。我们将在后边的章节接触到 Pool。我们将从 multiprocessing 模块的Process 类开始介绍。
multiprocessing 入门
Process 类和 threading 模块的 Thread 类很像。我们来创建一系列调用同一个函数的进程,看它是如何工作的:
import os from multiprocessing import Process def doubler(number): """ A doubling function that can be used by a process """ result = number * 2 proc = os.getpid() print(.format(data)) processed = data * 2 print(processed) if data is sentinel: break if __name__ == __main__: q = Queue() data = [5, 10, 13, -1] process_one = Process(target=creator, args=(data, q)) process_two = Process(target=my_consumer, args=(q,)) process_one.start() process_two.start() q.close() q.join_thread() process_one.join() process_two.join()
我们需要导入 Queue 和 Process。然后我们创建两个函数,一个创建数据并把它们加入队列里边,另一个取出数据并处理它们。把数据加入队列使用的是 Queue 的 put() 方法,取出数据用的是 get() 方法。最后一段代码创建了一个队列对象和一些进程,并运行它们。请注意,我们是在进程对象上调用了 join() 方法而不是在 Queue自身中。
结束语
本文讲述了很多内容。你已经学习了怎么对函数使用多进程,用队列实现进程间的通信,给线程命名等等。在 Python 的官方文档里边还有很多内容在本文里没有涉及到,你也可以去更深入的研究一下。不过现在你已经学会如何通过 Python 利用你的计算机的全部处理性能啦。
相关阅读
Python 官方文档:multiprocessing
Python Module of the Week: multiprocessing
Python Concurrency – Porting a Queue to multiprocessing