Python多进程并发(multiprocessing)用法实例详解


Posted in Python onJune 02, 2015

本文实例讲述了Python多进程并发(multiprocessing)用法。分享给大家供大家参考。具体分析如下:

由于Python设计的限制(我说的是咱们常用的CPython)。最多只能用满1个CPU核心。
Python提供了非常好用的多进程包multiprocessing,你只需要定义一个函数,Python会替你完成其他所有事情。借助这个包,可以轻松完成从单进程到并发执行的转换。

1、新建单一进程

如果我们新建少量进程,可以如下:

import multiprocessing
import time
def func(msg):
  for i in xrange(3):
    print msg
    time.sleep(1)
if __name__ == "__main__":
  p = multiprocessing.Process(target=func, args=("hello", ))
  p.start()
  p.join()
  print "Sub-process done."

2、使用进程池

是的,你没有看错,不是线程池。它可以让你跑满多核CPU,而且使用方法非常简单。

注意要用apply_async,如果落下async,就变成阻塞版本了。

processes=4是最多并发进程数量。

import multiprocessing
import time
def func(msg):
  for i in xrange(3):
    print msg
    time.sleep(1)
if __name__ == "__main__":
  pool = multiprocessing.Pool(processes=4)
  for i in xrange(10):
    msg = "hello %d" %(i)
    pool.apply_async(func, (msg, ))
  pool.close()
  pool.join()
  print "Sub-process(es) done."

3、使用Pool,并需要关注结果

更多的时候,我们不仅需要多进程执行,还需要关注每个进程的执行结果,如下:

import multiprocessing
import time
def func(msg):
  for i in xrange(3):
    print msg
    time.sleep(1)
  return "done " + msg
if __name__ == "__main__":
  pool = multiprocessing.Pool(processes=4)
  result = []
  for i in xrange(10):
    msg = "hello %d" %(i)
    result.append(pool.apply_async(func, (msg, )))
  pool.close()
  pool.join()
  for res in result:
    print res.get()
  print "Sub-process(es) done."

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python将ip地址转换成整数的方法
Mar 17 Python
Python的爬虫包Beautiful Soup中用正则表达式来搜索
Jan 20 Python
Python3实现购物车功能
Apr 18 Python
使用python读取txt文件的内容,并删除重复的行数方法
Apr 18 Python
Python中 map()函数的用法详解
Jul 10 Python
Python mutiprocessing多线程池pool操作示例
Jan 30 Python
使用django的ORM框架按月统计近一年内的数据方法
Jul 18 Python
Django ORM多对多查询方法(自定义第三张表&ManyToManyField)
Aug 09 Python
Python类中方法getitem和getattr详解
Aug 30 Python
python实现批量文件重命名
Oct 31 Python
python mysql中in参数化说明
Jun 05 Python
python实现MySQL指定表增量同步数据到clickhouse的脚本
Feb 26 Python
使用pdb模块调试Python程序实例
Jun 02 #Python
python使用xmlrpclib模块实现对百度google的ping功能
Jun 02 #Python
python基于xmlrpc实现二进制文件传输的方法
Jun 02 #Python
Python中的自省(反射)详解
Jun 02 #Python
Python中pip安装非PyPI官网第三方库的方法
Jun 02 #Python
Python中字典创建、遍历、添加等实用操作技巧合集
Jun 02 #Python
python实现的文件同步服务器实例
Jun 02 #Python
You might like
一个php Mysql类 可以参考学习熟悉下
2009/06/21 PHP
通过PHP的内置函数,通过DES算法对数据加密和解密
2012/06/21 PHP
PHP框架Laravel插件Pagination实现自定义分页
2020/04/22 PHP
PHP合并两个或多个数组的方法
2019/01/20 PHP
dojo 之基础篇(二)之从服务器读取数据
2007/03/24 Javascript
用js遍历 table的脚本
2008/07/23 Javascript
javascript 写类方式之四
2009/07/05 Javascript
分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容
2012/04/20 Javascript
jQuery $.data()方法使用注意细节
2012/12/31 Javascript
jQuery实现图片放大预览实现原理及代码
2013/09/12 Javascript
jquery用offset()方法获得元素的xy坐标
2014/09/06 Javascript
node.js中的fs.unlinkSync方法使用说明
2014/12/15 Javascript
jQuery插件windowScroll实现单屏滚动特效
2015/07/14 Javascript
Bootstrap table表格初始化表格数据的方法
2018/07/25 Javascript
Angular6 Filter实现页面搜索的示例代码
2018/12/02 Javascript
微信小程序之数据绑定原理解析
2019/08/14 Javascript
Object.keys() 和 Object.getOwnPropertyNames() 的区别详解
2020/05/21 Javascript
[01:37]全新的一集《真视界》——TI7总决赛
2017/09/21 DOTA
[01:18:35]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS BO3 第一场 1月29日
2021/03/11 DOTA
讲解Python中if语句的嵌套用法
2015/05/14 Python
Python内存读写操作示例
2018/07/18 Python
Python找出微信上删除你好友的人脚本写法
2018/11/01 Python
Python3.6.2调用ffmpeg的方法
2019/01/10 Python
python反编译学习之字节码详解
2019/05/19 Python
Python3离线安装Requests模块问题
2019/10/13 Python
Python加密模块的hashlib,hmac模块使用解析
2020/01/02 Python
Python reshape的用法及多个二维数组合并为三维数组的实例
2020/02/07 Python
css sprite简单实例
2016/05/23 HTML / CSS
盛大笔试题
2016/11/05 面试题
电气自动化大学生求职信
2013/10/16 职场文书
职员竞岗演讲稿
2014/05/14 职场文书
参赛口号
2014/06/16 职场文书
群众路线党员自我评议范文2014
2014/09/24 职场文书
代领报检证委托书范本
2014/10/11 职场文书
个人年终总结怎么写
2015/03/09 职场文书
求职自荐信范文(优秀篇)
2015/03/27 职场文书