
Python2.6版本中新添了multiprocessing模块。它最初由Jesse Noller和Richard Oudkerk定义在PEP 371中。就像你能经由过程threading模块衍生线程一样,multiprocessing 模块许可钠揭捉?生过程。这里用到的思惟:因为你如今能衍生过程,所以你可以或许避免应用全局说冥器锁(GIL),并且充分应用机械的多个处理器。
多过程包也包含一些根本不在threading 模块中的API。比如:有一个灵活的Pool类能让你在多个输入下并行化地履行函数。我们将在后面的末节讲解Pool类。我们将以multiprocessing模块的Process类开端讲解。
开端进修multiprocessing模块
Process这个类和threading模块中的Thread类很像。让我们创建一系列调用雷同函数的过程,并且看看它是若何工作的。
对于膳绫擎的例子,我们导入Process类、创建一个叫doubler的函数。在函数中,我们将传入的数字乘上2。我们也用Python的os模块来获取当前过程的ID(pid)。这个ID将告诉我们哪个过程正在调用doubler函数。然后,鄙人面的代码块中,我们实例化了一系列的Process类并且启动它们。最后一个轮回只是调用每个过程的join()办法,该办法告诉Python等待过程直到它停止。如不雅你须要停止一个过程,你可声调用它的terminate()办法。
当你运行膳绫擎的代码,你应当看到和下面类似的输出结不雅:
- 5 doubled to 10 by process id: 10468
- 10 doubled to 20 by process id: 10469
- 15 doubled to 30 by process id: 10470
- 20 doubled to 40 by process id: 10471
- 25 doubled to 50 by process id: 10472
有时刻,你最好给你的过程取一个易于懂得的名字 。荣幸的是,Process类确实袈涫许你拜访同样的过程。让我们来看看如下例子:
- import os
- from multiprocessing import Process, current_process
- def doubler(number):
- """
- A doubling function that can be used by a process
- """
- result = number * 2
- proc_name = current_process().name
- print('{0} doubled to {1} by: {2}'.format(
- number, result, proc_name))
- if __name__ == '__main__':
- numbers = [5, 10, 15, 20, 25]
- procs = []
- proc = Process(target=doubler, args=(5,))
- for
推荐阅读
马云说智能世界三要素:互联网、大数据、云计算,机器是不可能取代人类的
我今天不是为不合而不合,我本身认为我们在进入数据时代,一个很重要的事,每小我对每个问题的看法、角度、深度和广度必须是不一样的,只有不一样,你才是你。人工智能,我是这么看的良士>>>详细阅读
本文标题:Python多进程教程
地址:http://www.17bianji.com/lsqh/35977.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示