banner

一文学会Python多进程编程

作者: 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

banner
看过还想看
可能还想看
最新文章
Yonghong Z-Suite一站式大数据分析平台 —— 以卓越的数据技术为客户创造价值,实现客户成功。