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的另外几种语言实现
Jan 29 Python
详解Python list 与 NumPy.ndarry 切片之间的对比
Jul 24 Python
tensorflow实现简单的卷积神经网络
May 24 Python
如何使用Python进行OCR识别图片中的文字
Apr 01 Python
python实现本地批量ping多个IP的方法示例
Aug 07 Python
Django之模板层的实现代码
Sep 09 Python
18个Python脚本可加速你的编码速度(提示和技巧)
Oct 17 Python
python安装gdal的两种方法
Oct 29 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
Aug 07 Python
Django框架实现在线考试系统的示例代码
Nov 30 Python
python实现xml转json文件的示例代码
Dec 30 Python
Python实现对齐打印 format函数的用法
Apr 28 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
CodeIgniter框架验证码类库文件与用法示例
2017/03/18 PHP
Yii2.0实现生成二维码功能实例
2017/10/24 PHP
php中try catch捕获异常实例详解
2020/08/06 PHP
JavaScript的面向对象方法以及差别
2008/03/31 Javascript
js以对象为索引的关联数组
2010/07/04 Javascript
使用delegate方法为一个tr标签加一个链接
2014/06/27 Javascript
javascript中for/in循环及使用技巧
2015/09/01 Javascript
谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法
2015/12/03 Javascript
详解js跨域原理以及2种解决方案
2015/12/09 Javascript
jQuery.uploadify文件上传组件实例讲解
2016/09/23 Javascript
Vue2.0实现1.0的搜索过滤器功能实例代码
2017/03/20 Javascript
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
2017/08/16 Javascript
微信小程序在ios下Echarts图表不能滑动的问题解决
2019/07/10 Javascript
微信小程序引入VANT组件的方法步骤
2019/09/19 Javascript
vue移动端使用canvas签名的实现
2020/01/15 Javascript
vue实现图片按比例缩放问题操作
2020/08/11 Javascript
JavaScript判断数据类型有几种方法及区别介绍
2020/09/02 Javascript
微信小程序实现文件预览
2020/10/22 Javascript
[14:57]DOTA2 HEROS教学视频教你分分钟做大人-幽鬼
2014/06/13 DOTA
python类参数self使用示例
2014/02/17 Python
举例讲解Python中的Null模式与桥接模式编程
2016/02/02 Python
python matplotlib坐标轴设置的方法
2017/12/05 Python
Python类的继承和多态代码详解
2017/12/27 Python
Python读取word文本操作详解
2018/01/22 Python
python实现将一个数组逆序输出的方法
2018/06/25 Python
python pyinstaller打包exe报错的解决方法
2019/11/02 Python
CSS3 Media Queries详细介绍和使用实例
2014/05/08 HTML / CSS
美国在线精品家居网站:Burke Decor
2017/04/12 全球购物
护士求职推荐信范文
2013/11/23 职场文书
财务务虚会发言材料
2014/10/20 职场文书
2014年环卫工作总结
2014/11/22 职场文书
捐助倡议书
2015/01/19 职场文书
健康证明
2015/06/19 职场文书
消防宣传标语大全
2015/08/03 职场文书
周末问候语大全
2015/11/10 职场文书
2016党员学习《反对自由主义》心得体会
2016/01/22 职场文书