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 采集中文乱码问题的完美解决方法
Sep 27 Python
Python生成器定义与简单用法实例分析
Apr 30 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
Oct 14 Python
python执行CMD指令,并获取返回的方法
Dec 19 Python
numpy数组广播的机制
Jul 12 Python
python之拟合的实现
Jul 19 Python
python使用opencv实现马赛克效果示例
Sep 28 Python
WxPython实现无边框界面
Nov 18 Python
Python tkinter实现图片标注功能(完整代码)
Dec 08 Python
python interpolate插值实例
Jul 06 Python
python 实现定时任务的四种方式
Apr 01 Python
python 提取html文本的方法
May 20 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应用JSON技巧讲解
2013/02/03 PHP
标准PHP的AES加密算法类
2015/03/12 PHP
Laravel框架自定义分页样式操作示例
2020/01/26 PHP
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
2007/04/21 Javascript
JQuery中对服务器控件 DropdownList, RadioButtonList, CheckboxList的操作总结
2011/06/28 Javascript
JQury slideToggle闪烁问题及解决办法
2011/07/05 Javascript
ExtJS4 动态生成的grid导出为excel示例
2014/05/02 Javascript
javascript刷新父页面的各种方法汇总
2014/09/03 Javascript
你不知道的高性能JAVASCRIPT
2016/01/18 Javascript
完美实现八种js焦点轮播图(下篇)
2020/04/20 Javascript
在node中如何使用 ES6
2017/04/22 Javascript
vue jsx 使用指南及vue.js 使用jsx语法的方法
2017/11/11 Javascript
对vue中methods互相调用的方法详解
2018/08/30 Javascript
JS出现404错误原理及解决方案
2020/07/01 Javascript
通过vue刷新左侧菜单栏操作
2020/08/06 Javascript
python实现人脸识别经典算法(一) 特征脸法
2018/03/13 Python
Python网络编程基于多线程实现多用户全双工聊天功能示例
2018/04/10 Python
Python数据分析matplotlib设置多个子图的间距方法
2018/08/03 Python
pycharm 安装JPype的教程
2019/08/08 Python
Python多线程多进程实例对比解析
2020/03/12 Python
Python设计密码强度校验程序
2020/07/30 Python
详解canvas绘图时遇到的跨域问题
2018/03/22 HTML / CSS
Canvas引入跨域的图片导致toDataURL()报错的问题的解决
2018/09/19 HTML / CSS
英国电动工具购买网站:Anglia Tool Centre
2017/04/25 全球购物
英国在线药房和在线医生:LloydsPharmacy
2019/10/21 全球购物
高级护理专业毕业生推荐信
2013/12/25 职场文书
物业总经理助理岗位职责
2014/06/29 职场文书
公司离职证明标准样本
2014/10/05 职场文书
2014年转正工作总结
2014/11/08 职场文书
担保书格式
2015/01/20 职场文书
英语导游词
2015/02/13 职场文书
党校毕业个人总结
2015/02/28 职场文书
2015年六一儿童节活动方案
2015/05/05 职场文书
服务行业标语口号
2015/12/26 职场文书
P站美图推荐——变身女主角特辑
2022/03/20 日漫
SQL Server内存机制浅探
2022/04/06 SQL Server