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 (2)
Oct 31 Python
Python中使用第三方库xlrd来写入Excel文件示例
Apr 05 Python
python实现决策树
Dec 21 Python
Django后台获取前端post上传的文件方法
May 28 Python
django 发送邮件和缓存的实现代码
Jul 18 Python
Django 中使用流响应处理视频的方法
Jul 20 Python
pyttsx3实现中文文字转语音的方法
Dec 24 Python
对python中的try、except、finally 执行顺序详解
Feb 18 Python
Django中使用Whoosh进行全文检索的方法
Mar 31 Python
对Python函数设计规范详解
Jul 19 Python
利用python Selenium实现自动登陆京东签到领金币功能
Oct 31 Python
Python IDLE或shell中切换路径的操作
Mar 09 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
《雄兵连》系列首部大电影《烈阳天道》:可能是因为期望值太高了
2020/08/18 国漫
PHP的类 功能齐全的发送邮件类
2006/10/09 PHP
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
2007/09/24 PHP
php扩展ZF――Validate扩展
2008/01/10 PHP
Linux下创建nginx脚本-start、stop、reload…
2014/08/03 PHP
PHP中strtr字符串替换用法详解
2014/11/26 PHP
smarty内置函数config_load用法实例
2015/01/22 PHP
YII2自动登录Cookie总是失效的解决方法
2017/06/28 PHP
详解php中serialize()和unserialize()函数
2017/07/08 PHP
PHP迭代器接口Iterator用法分析
2017/12/28 PHP
php中file_get_contents()函数用法实例
2019/02/21 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
谈一谈javascript中继承的多种方式
2016/02/19 Javascript
jquery获取img的src值的简单实例
2016/05/17 Javascript
node.js cookie-parser 中间件介绍
2016/06/06 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
vuex实现简易计数器
2016/10/27 Javascript
inner join 内联与left join 左联的实例代码
2017/09/18 Javascript
node-red File读取好保存实例讲解
2019/09/11 Javascript
微信小程序本地存储实现每日签到、连续签到功能
2019/10/09 Javascript
vue+elementui实现点击table中的单元格触发事件--弹框
2020/07/18 Javascript
openLayer4实现动态改变标注图标
2020/08/17 Javascript
Python Flask 搭建微信小程序后台详解
2019/05/06 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
2019/07/01 Python
python 图片去噪的方法示例
2019/07/09 Python
python使用协程实现并发操作的方法详解
2019/12/27 Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
2020/03/01 Python
Python进程的通信Queue、Pipe实例分析
2020/03/30 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
2020/06/17 Python
Python 在 VSCode 中使用 IPython Kernel 的方法详解
2020/09/05 Python
Matplotlib配色之Colormap详解
2021/01/05 Python
C++:memset ,memcpy和strcpy的根本区别
2013/04/27 面试题
导游实习生自荐书
2014/01/28 职场文书
2013年研究生毕业感言
2014/02/06 职场文书
小学生期末评语
2014/04/21 职场文书
MySQL之select、distinct、limit的使用
2021/11/11 MySQL