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实现代理服务功能实例
Nov 15 Python
Python科学计算之NumPy入门教程
Jan 15 Python
浅谈numpy数组中冒号和负号的含义
Apr 18 Python
flask框架中勾子函数的使用详解
Aug 01 Python
使用Scrapy爬取动态数据
Oct 21 Python
Python2和Python3.6环境解决共存问题
Nov 09 Python
Python切片操作去除字符串首尾的空格
Apr 22 Python
pyqt5 使用cv2 显示图片,摄像头的实例
Jun 27 Python
解决python tkinter界面卡死的问题
Jul 17 Python
python实现递归查找某个路径下所有文件中的中文字符
Aug 31 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
Dec 14 Python
python基础之停用词过滤详解
Apr 21 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脚本的10个技巧(8)
2006/10/09 PHP
特详细的PHPMYADMIN简明安装教程
2008/08/01 PHP
php存储过程调用实例代码
2013/02/03 PHP
PHP 读取和编写 XML
2014/11/19 PHP
Laravel框架中缓存的使用方法分析
2019/09/06 PHP
Laravel 修改验证异常的响应格式实例代码详解
2020/05/25 PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
2020/11/22 PHP
理清apply(),call()的区别和关系
2011/08/14 Javascript
使用js画图之圆、弧、扇形
2015/01/12 Javascript
jquery实现标签支持图文排列带上下箭头按钮的选项卡
2015/03/14 Javascript
javascript常用经典算法实例详解
2015/11/25 Javascript
详解Bootstrap创建表单的三种格式(一)
2016/01/04 Javascript
javascript实现简单的全选和反选功能
2016/01/05 Javascript
JavaScipt中栈的实现方法
2016/02/17 Javascript
在小程序/mpvue中使用flyio发起网络请求的方法
2018/09/13 Javascript
vue-cli V3.0版本的使用详解
2018/10/24 Javascript
解决ie11 SCRIPT5011:不能执行已释放Script的代码问题
2019/05/05 Javascript
JS深入学习之数组对象排序操作示例
2020/05/01 Javascript
python2与python3中关于对NaN类型数据的判断和转换方法
2018/10/30 Python
在linux下实现 python 监控usb设备信号
2019/07/03 Python
python实现屏保程序(适用于背单词)
2019/07/30 Python
python 利用pyttsx3文字转语音过程详解
2019/09/25 Python
PyQt5中多线程模块QThread使用方法的实现
2020/01/31 Python
浅谈Python中的继承
2020/06/19 Python
python 获取字典键值对的实现
2020/11/12 Python
佐卡伊官网:中国知名珠宝品牌
2017/02/05 全球购物
法国发饰品牌:Alexandre De Paris
2018/12/04 全球购物
汽车运用工程毕业生自荐信
2013/10/29 职场文书
物业客服专员岗位职责
2013/11/30 职场文书
企业内部培训方案
2014/02/04 职场文书
竞选班长的演讲稿
2014/04/24 职场文书
红头文件任命书范本
2014/06/05 职场文书
代领毕业证委托书
2014/08/02 职场文书
领导干部查摆“四风”问题自我剖析材料思想汇报
2014/10/05 职场文书
2015年普法依法治理工作总结
2015/05/26 职场文书
MYSQL优化之数据表碎片整理详解
2022/04/03 MySQL