作家
登录

Python多进程教程

作者: 来源: 2017-06-30 15:02:05 阅读 我要评论

Python多过程教程

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()办法。

当你运行膳绫擎的代码,你应当看到和下面类似的输出结不雅:

  1. 5 doubled to 10 by process id: 10468 
  2.  
  3. 10 doubled to 20 by process id: 10469 
  4.  
  5. 15 doubled to 30 by process id: 10470 
  6.  
  7. 20 doubled to 40 by process id: 10471 
  8.  
  9. 25 doubled to 50 by process id: 10472 

有时刻,你最好给你的过程取一个易于懂得的名字 。荣幸的是,Process类确实袈涫许你拜访同样的过程。让我们来看看如下例子:

  1. import os 
  2.  
  3. from multiprocessing import Process, current_process 
  4.  
  5. def doubler(number): 
  6.  
  7.     ""
  8.  
  9.     A doubling function that can be used by a process 
  10.  
  11.     ""
  12.  
  13.     result = number * 2 
  14.  
  15.     proc_name = current_process().name 
  16.  
  17.     print('{0} doubled to {1} by: {2}'.format( 
  18.  
  19.         number, result, proc_name)) 
  20.  
  21. if __name__ == '__main__'
  22.  
  23.     numbers = [5, 10, 15, 20, 25] 
  24.  
  25.     procs = [] 
  26.  
  27.     proc = Process(target=doubler, args=(5,)) 
  28.  
  29.     for 
     1/6    1 2 3 4 5 6 下一页 尾页

      推荐阅读

      马云说智能世界三要素:互联网、大数据、云计算,机器是不可能取代人类的

    我今天不是为不合而不合,我本身认为我们在进入数据时代,一个很重要的事,每小我对每个问题的看法、角度、深度和广度必须是不一样的,只有不一样,你才是你。人工智能,我是这么看的良士>>>详细阅读


    本文标题:Python多进程教程

    地址:http://www.17bianji.com/lsqh/35977.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)