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 19 Python
Pytorch中accuracy和loss的计算知识点总结
Sep 10 Python
python提取xml里面的链接源码详解
Oct 15 Python
Django框架表单操作实例分析
Nov 04 Python
django数据模型on_delete, db_constraint的使用详解
Dec 24 Python
IronPython连接MySQL的方法步骤
Dec 27 Python
Python类及获取对象属性方法解析
Jun 15 Python
python中如何写类
Jun 29 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
Sep 28 Python
python中子类与父类的关系基础知识点
Feb 02 Python
教你如何使用Python Tkinter库制作记事本
Jun 10 Python
Python集合的基础操作
Nov 01 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/03/04 星际争霸
PHP 利用Mail_MimeDecode类提取邮件信息示例
2014/01/26 PHP
浅谈php数组array_change_key_case() 函数和array_chunk()函数
2016/10/22 PHP
php实现的http请求封装示例
2016/11/08 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(下:动画篇)
2010/03/24 Javascript
js自定义事件及事件交互原理概述(一)
2013/02/01 Javascript
javacript使用break内层跳出外层循环分析
2015/01/12 Javascript
Java File类的常用方法总结
2015/03/18 Javascript
JavaScript中的pow()方法使用详解
2015/06/15 Javascript
jquery实现图片上传之前预览的方法
2015/07/11 Javascript
jQuery图片旋转插件jQueryRotate.js用法实例(附demo下载)
2016/01/21 Javascript
浅析jQuery 3.0中的Data
2016/06/14 Javascript
Bootstrap编写一个在当前网页弹出可关闭的对话框 非弹窗
2016/06/30 Javascript
jQuery实现根据滚动条位置加载相应内容功能
2016/07/18 Javascript
关于两个jQuery(js)特效冲突的bug的解决办法
2016/09/04 Javascript
jQuery通过ajax快速批量提交表单数据
2016/10/25 Javascript
vue中的非父子间的通讯问题简单的实例代码
2017/07/19 Javascript
动态内存分配导致影响Javascript性能的问题
2018/12/18 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
2019/06/24 Javascript
Vue2.0 实现页面缓存和不缓存的方式
2019/11/12 Javascript
​如何愉快地迁移到 Python 3
2019/04/28 Python
Python 共享变量加锁、释放详解
2019/08/28 Python
Pandas+Matplotlib 箱式图异常值分析示例
2019/12/09 Python
Python requests模块session代码实例
2020/04/14 Python
python数据抓取3种方法总结
2021/02/07 Python
css3实现一个div设置多张背景图片及background-image属性实例演示
2017/08/10 HTML / CSS
一个不错的HTML5 Canvas多层点击事件监听实例
2014/04/29 HTML / CSS
德国古洛迷亚百货官网:GALERIA Kaufhof
2017/06/20 全球购物
Agoda.com官方网站:便宜预订全球酒店,高达80%的折扣
2018/04/04 全球购物
医科大学生毕业的自我评价分享
2013/11/12 职场文书
2014年惩防体系建设工作总结
2014/12/01 职场文书
安全保证书格式
2015/02/28 职场文书
Python中如何处理常见报错
2022/01/18 Python
使用Mysql计算地址的经纬度距离和实时位置信息
2022/04/29 MySQL