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 23 Python
python八大排序算法速度实例对比
Dec 06 Python
Python科学计算包numpy用法实例详解
Feb 08 Python
Python XML转Json之XML2Dict的使用方法
Jan 15 Python
python的一些加密方法及python 加密模块
Jul 11 Python
python递归法解决棋盘分割问题
Jul 17 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
Aug 12 Python
通过 Django Pagination 实现简单分页功能
Nov 11 Python
py-charm延长试用期限实例
Dec 22 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
Mar 10 Python
Python实现打包成库供别的模块调用
Jul 13 Python
requests在python中发送请求的实例讲解
Feb 17 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
咖啡豆要不要放冰箱的原因
2021/03/04 冲泡冲煮
php+jquery编码方面的一些心得(utf-8 gb2312)
2010/10/12 PHP
php 数组排序 array_multisort与uasort的区别
2011/03/24 PHP
使用dump函数,给php加断点测试
2013/06/25 PHP
php进行ip地址掩码运算处理的方法
2016/07/11 PHP
详解PHP处理字符串类似indexof的方法函数
2017/06/11 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
2014/11/12 Javascript
Javascript Object 对象学习笔记
2014/12/17 Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
2015/05/06 Javascript
AngularJS学习笔记之ng-options指令
2015/06/16 Javascript
原生JavaScript实现Ajax的方法
2016/04/07 Javascript
jQuery插件fullPage.js实现全屏滚动效果
2016/12/02 Javascript
JavaScript正则表达式函数总结(常用)
2018/02/22 Javascript
vue利用axios来完成数据的交互
2018/03/23 Javascript
webpack 插件html-webpack-plugin的具体使用
2018/04/09 Javascript
详解从Vue-router到html5的pushState
2018/07/21 Javascript
webpack常用配置总览(小结)
2019/11/18 Javascript
python中getattr函数使用方法 getattr实现工厂模式
2014/01/20 Python
解析Python中的变量、引用、拷贝和作用域的问题
2015/04/07 Python
python通过定义一个类实例作为ftp回调方法
2015/05/04 Python
python操作mongodb根据_id查询数据的实现方法
2015/05/20 Python
python爬取酷狗音乐排行榜
2019/02/20 Python
Python+selenium点击网页上指定坐标的实例
2019/07/05 Python
python使用Qt界面以及逻辑实现方法
2019/07/10 Python
Python爬虫爬取电影票房数据及图表展示操作示例
2020/03/27 Python
python实现三种随机请求头方式
2021/01/05 Python
CSS3的transition和animation的用法实例介绍
2014/08/20 HTML / CSS
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
Hibernate持久层技术
2013/12/16 面试题
饭店工作计划书
2014/01/10 职场文书
《都江堰》教学反思
2014/02/07 职场文书
小学生国庆演讲稿
2014/09/05 职场文书
实习生工作证明范本
2014/09/14 职场文书
幼儿园教师节感谢信
2015/01/23 职场文书
小学大队委竞选口号
2015/12/25 职场文书