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中线程的MQ消息队列实现以及消息队列的优点解析
Jun 29 Python
Python Pandas找到缺失值的位置方法
Apr 12 Python
python发送邮件脚本
May 22 Python
Python实现求两个数组交集的方法示例
Feb 23 Python
Django项目使用CircleCI的方法示例
Jul 14 Python
python障碍式期权定价公式
Jul 19 Python
Python Opencv任意形状目标检测并绘制框图
Jul 23 Python
Django实现从数据库中获取到的数据转换为dict
Mar 27 Python
Python logging模块原理解析及应用
Aug 13 Python
Python3 用matplotlib绘制sigmoid函数的案例
Dec 11 Python
Python干货实战之八音符酱小游戏全过程详解
Oct 24 Python
Python matplotlib多个子图绘制整合
Apr 13 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页面跳转代码 输入网址跳转到你定义的页面
2013/03/28 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
2017/06/30 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
PHP实现简单的计算器
2020/08/28 PHP
jQuery+jqmodal弹出窗口实现代码分明
2010/06/14 Javascript
控制页面按钮在后台执行期间不重复提交的JS方法
2013/06/24 Javascript
基于jquery扩展漂亮的CheckBox(自己编写)
2013/11/19 Javascript
js登录弹出层特效
2014/03/07 Javascript
jquery form 加载数据示例
2014/04/21 Javascript
sails框架的学习指南
2014/12/22 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
JavaScript仿flash遮罩动画效果
2016/06/15 Javascript
浅谈javascript中关于日期和时间的基础知识
2016/07/13 Javascript
基于vue监听滚动事件实现锚点链接平滑滚动的方法
2018/01/17 Javascript
微信小程序实现折叠与展开文章功能
2018/06/12 Javascript
微信小程序url传参写变量的方法
2018/08/09 Javascript
原生js实现移动端Touch轮播图的方法步骤
2019/01/03 Javascript
JS基于开关思想实现的数组去重功能【案例】
2019/02/18 Javascript
详解Vscode中使用Eslint终极配置大全
2019/11/08 Javascript
IDEA配置jQuery, $符号不再显示黄色波浪线的问题
2020/10/09 jQuery
JS画布动态实现黑客帝国背景效果
2020/11/08 Javascript
[02:50]【扭转乾坤,只此一招】DOTA2永雾林渊版本开启新篇章
2020/12/22 DOTA
pygame学习笔记(4):声音控制
2015/04/15 Python
Django的分页器实例(paginator)
2017/12/01 Python
Python实现替换文件中指定内容的方法
2018/03/19 Python
对python 中re.sub,replace(),strip()的区别详解
2019/07/22 Python
python 正则表达式参数替换实例详解
2020/01/17 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
2020/04/29 Python
python中entry用法讲解
2020/12/04 Python
matplotlib对象拾取事件处理的实现
2021/01/14 Python
小蚁科技官方商店:YI Technology
2019/08/23 全球购物
什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?
2016/08/13 面试题
采购文员岗位职责
2013/11/20 职场文书
写给学生的新学期寄语
2014/01/18 职场文书
个人房屋买卖协议书(范本)
2014/10/04 职场文书
浅谈移动端中的视口(viewport)的具体使用
2021/04/13 HTML / CSS