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中文字符串截取问题
Jun 15 Python
详解Django框架中用户的登录和退出的实现
Jul 23 Python
使用C#配合ArcGIS Engine进行地理信息系统开发
Feb 19 Python
Python获取当前函数名称方法实例分享
Jan 18 Python
Python的多维空数组赋值方法
Apr 13 Python
详谈python在windows中的文件路径问题
Apr 28 Python
使用python爬取B站千万级数据
Jun 08 Python
Numpy之random函数使用学习
Jan 29 Python
Python通过Tesseract库实现文字识别
Mar 05 Python
在 Pycharm 安装使用black的方法详解
Apr 02 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
Apr 15 Python
使用python对excel表格处理的一些小功能
Jan 25 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
ThinkPHP之foreach标签使用概述
2014/06/30 PHP
php DES加密算法实例分析
2019/09/18 PHP
解密效果
2006/06/23 Javascript
jQuery 锚点跳转滚动条平滑滚动一句话代码
2010/04/30 Javascript
为JavaScript类型增加方法的实现代码(增加功能)
2011/12/29 Javascript
通过jQuery源码学习javascript(三)
2012/12/27 Javascript
jquery属性过滤选择器使用示例
2013/06/18 Javascript
jQuery实现contains方法不区分大小写的方法
2015/02/13 Javascript
jQuery实现自动切换播放的经典滑动门效果
2015/09/12 Javascript
javascript实现3D切换焦点图
2015/10/16 Javascript
浅谈JS中逗号运算符的用法
2016/06/12 Javascript
基于KO+BootStrap+MVC实现的分页控件代码分享
2016/11/07 Javascript
详解Angular的双向数据绑定(MV-VM)
2016/12/26 Javascript
JS 在数组指定位置插入/删除数据的方法
2017/01/12 Javascript
nodejs基础应用
2017/02/03 NodeJs
使用svg实现动态时钟效果
2018/07/17 Javascript
vue项目中,main.js,App.vue,index.html的调用方法
2018/09/20 Javascript
Vue的H5页面唤起支付宝支付功能
2019/04/18 Javascript
Vue使用Canvas绘制图片、矩形、线条、文字,下载图片
2019/04/26 Javascript
layui监听select变化,以及设置radio选中的方法
2019/09/24 Javascript
JavaScript运行机制实例分析
2020/04/11 Javascript
[01:00]一分钟回顾2018DOTA2亚洲邀请赛现场活动
2018/04/07 DOTA
python增加矩阵维度的实例讲解
2018/04/04 Python
python文件转为exe文件的方法及用法详解
2019/07/08 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
2019/07/23 Python
Keras 切换后端方式(Theano和TensorFlow)
2020/06/19 Python
python如何实现图片压缩
2020/09/11 Python
html5中valid、invalid、required的定义
2014/02/21 HTML / CSS
阿里巴巴英国:Alibaba英国
2019/12/11 全球购物
一套VC试题
2015/01/23 面试题
应届生法律求职信
2013/10/22 职场文书
什么是岗位职责
2013/11/12 职场文书
学生拾金不昧表扬信
2014/01/21 职场文书
2014年清明节寄语
2014/04/03 职场文书
房产买卖委托公证书
2014/04/04 职场文书
开会迟到检讨书范文
2015/05/06 职场文书