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 21 Python
Python装饰器入门学习教程(九步学习)
Jan 28 Python
python发送邮件实例分享
Jul 28 Python
Python实现将照片变成卡通图片的方法【基于opencv】
Jan 17 Python
python使用mysql的两种使用方式
Mar 07 Python
python正向最大匹配分词和逆向最大匹配分词的实例
Nov 14 Python
django celery redis使用具体实践
Apr 08 Python
python实现移动木板小游戏
Oct 09 Python
matplotlib grid()设置网格线外观的实现
Feb 22 Python
Django实现在线无水印抖音视频下载(附源码及地址)
May 06 Python
Python实现信息管理系统
Jun 05 Python
使用Django框架创建项目
Jun 10 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
解决phpmyadmin中文乱码问题。。。
2007/01/18 PHP
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
使用PHP函数scandir排除特定目录
2014/06/12 PHP
php实现阳历阴历互转的方法
2015/10/28 PHP
在laravel中实现ORM模型使用第二个数据库设置
2019/10/24 PHP
基于jquery的合并table相同单元格的插件(精简版)
2011/04/05 Javascript
Nodejs下用submit提交表单提示cannot post错误的解决方法
2016/11/21 NodeJs
Vue组件tree实现树形菜单
2017/04/13 Javascript
VUE-Table上绑定Input通过render实现双向绑定数据的示例
2018/08/27 Javascript
判断js数据类型的函数实例详解
2019/05/23 Javascript
jquery.pager.js实现分页效果
2019/07/29 jQuery
Layui选项卡制作历史浏览记录的方法
2019/09/28 Javascript
vue实现打地鼠小游戏
2020/08/21 Javascript
vue 避免变量赋值后双向绑定的操作
2020/11/07 Javascript
WebStorm无法正确识别Vue3组合式API的解决方案
2021/02/18 Vue.js
Python基于回溯法子集树模板解决野人与传教士问题示例
2017/09/11 Python
numpy中的高维数组转置实例
2018/04/17 Python
使用Flask集成bootstrap的方法
2018/07/24 Python
pyqt5 QProgressBar清空进度条的实例
2019/06/21 Python
Python 使用元类type创建类对象常见应用详解
2019/10/17 Python
Python Celery多队列配置代码实例
2019/11/22 Python
Pycharm最新激活码2019(推荐)
2019/12/31 Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
2020/02/09 Python
python实现遍历文件夹图片并重命名
2020/03/23 Python
如何在vscode中安装python库的方法步骤
2021/01/06 Python
Canvas在超级玛丽游戏中的应用详解
2021/02/06 HTML / CSS
番木瓜健康和保健产品第一大制造商:Herbal Papaya
2017/04/25 全球购物
如果让你测试一台高速激光打印机,你都会进行哪些测试
2012/12/04 面试题
介绍一下MYSQL常用的优化技巧
2012/10/25 面试题
初中生个人学习的自我评价
2013/12/04 职场文书
微信营销策划方案
2014/02/24 职场文书
导游词开场白
2015/01/31 职场文书
质量整改通知单
2015/04/21 职场文书
使用pandas生成/读取csv文件的方法实例
2021/07/09 Python
Redis字典实现、Hash键冲突及渐进式rehash详解
2021/09/04 Redis
Java 多线程并发FutureTask
2022/06/28 Java/Android