Python多进程池 multiprocessing Pool用法示例


Posted in Python onSeptember 07, 2018

本文实例讲述了Python多进程池 multiprocessing Pool用法。分享给大家供大家参考,具体如下:

1. 背景

由于需要写python程序, 定时、大量发送htttp请求,并对结果进行处理。

参考其他代码有进程池,记录一下。

2. 多进程 vs 多线程

  • c++程序中,单个模块通常是单进程,会启动几十、上百个线程,充分发挥机器性能。(目前c++11有了std::thread编程多线程很方便,可以参考我之前的博客)
  • shell脚本中,都是多进程后台执行。({ ...} &, 可以参考我之前的博客,实现shell并发处理任务)
  • python脚本有多线程和多进程。由于python全局解锁锁的GIL的存在,一般建议 CPU密集型应该采用多进程充分发挥多核优势,I/O密集型可以采用多线程。

尽管Python完全支持多线程编程, 但是解释器的C语言实现部分在完全并行执行时并不是线程安全的。
实际上,解释器被一个全局解释器锁保护着,它确保任何时候都只有一个Python线程执行。
GIL最大的问题就是Python的多线程程序并不能利用多核CPU的优势 (比如一个使用了多个线程的计算密集型程序只会在一个单CPU上面运行)。

3. multiprocessing pool使用例子

对Pool对象调用join()方法会等待所有子进程执行完毕,调用join()之前必须先调用close(),让其不再接受新的Process了

#coding=utf-8
import logging
import time
from multiprocessing import Pool
logging.basicConfig(level=logging.INFO, filename='logger.log')
class Point:
  def __init__(self, x = 0, y= 0):
    self.x = x
    self.y = y
  def __str__(self):
    return "(%d, %d)" % (self.x, self.y)
def fun1(point):
  point.x = point.x + 3
  point.y = point.y + 3
  time.sleep(1)
  return point
def fun2(x):
  time.sleep(1)
  logging.info(time.ctime() + ", fun2 input x:" + str(x))
  return x * x
if __name__ == '__main__':
  pool = Pool(4)
  #test1
  mylist = [x for x in range(10)]
  ret = pool.map(fun2, mylist)
  print ret
  #test2
  mydata = [Point(x, y) for x in range(3) for y in range(2)]
  res = pool.map(fun1, mydata)
  for i in res:
    print str(i)
  #end
  pool.close()
  pool.join()
  print "end"

运行结果:

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
(3, 3)
(3, 4)
(4, 3)
(4, 4)
(5, 3)
(5, 4)
end

4. 参考

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
用Python实现通过哈希算法检测图片重复的教程
Apr 02 Python
以911新闻为例演示Python实现数据可视化的教程
Apr 23 Python
在Django的form中使用CSS进行设计的方法
Jul 18 Python
django中ORM模型常用的字段的使用方法
Mar 05 Python
python中的协程深入理解
Jun 10 Python
pytorch forward两个参数实例
Jan 17 Python
Python编程快速上手——正则表达式查找功能案例分析
Feb 28 Python
使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
Jul 23 Python
基于Python的一个自动录入表格的小程序
Aug 05 Python
使用Python操作MySQL的小技巧
Sep 10 Python
Python数据类型最全知识总结
May 31 Python
Django模型层实现多表关系创建和多表操作
Jul 21 Python
详解python while 函数及while和for的区别
Sep 07 #Python
使用TensorFlow实现SVM
Sep 06 #Python
使用Python制作自动推送微信消息提醒的备忘录功能
Sep 06 #Python
python实现机器学习之多元线性回归
Sep 06 #Python
python实现机器学习之元线性回归
Sep 06 #Python
Python import与from import使用及区别介绍
Sep 06 #Python
用python实现k近邻算法的示例代码
Sep 06 #Python
You might like
php.ini中的request_order推荐设置
2015/05/10 PHP
php使用Jpgraph绘制饼状图的方法
2015/06/10 PHP
Apache启动报错No space left on device: AH00023该怎么解决
2015/10/16 PHP
javascript父、子页面交互技巧总结
2014/08/08 Javascript
javascript修改图片src的方法
2015/01/27 Javascript
Jquery中find与each方法用法实例
2015/02/04 Javascript
JQuery跳出each循环的方法
2015/04/16 Javascript
微信WeixinJSBridge API使用实例
2015/05/25 Javascript
javaScript事件学习小结(四)event的公共成员(属性和方法)
2016/06/09 Javascript
微信小程序 教程之wxapp视图容器 scroll-view
2016/10/19 Javascript
Angularjs+bootstrap+table多选(全选)支持单击行选中实现编辑、删除功能
2017/03/27 Javascript
nodejs 图解express+supervisor+ejs的用法(推荐)
2017/09/08 NodeJs
javascript canvas API内容整理
2020/02/16 Javascript
python的id()函数介绍
2013/02/10 Python
python通过yield实现数组全排列的方法
2015/03/18 Python
TensorFlow的权值更新方法
2018/06/14 Python
python实现RabbitMQ的消息队列的示例代码
2018/11/08 Python
如何在python中实现随机选择
2019/11/02 Python
python中自带的三个装饰器的实现
2019/11/08 Python
Python中文分词库jieba,pkusegwg性能准确度比较
2020/02/11 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
2020/03/28 Python
Keras SGD 随机梯度下降优化器参数设置方式
2020/06/19 Python
python语言time库和datetime库基本使用详解
2020/12/25 Python
python如何用matplotlib创建三维图表
2021/01/26 Python
解决virtualenv -p python3 venv报错的问题
2021/02/05 Python
Aveda美国官网:天然护发产品、洗发水、护发素和沙龙
2016/12/09 全球购物
快时尚眼镜品牌,全国连锁眼镜店:LOHO眼镜生活
2018/10/08 全球购物
巴西独家产品和现场演示购物网站:Shoptime
2019/07/11 全球购物
德国购买门票网站:ADticket.de
2019/10/31 全球购物
杭州联环马网络笔试题面试题
2013/08/04 面试题
体育教师自我鉴定
2014/02/12 职场文书
小学生开学感言
2014/02/28 职场文书
消防安全承诺书
2014/05/22 职场文书
终止劳动合同通知书
2015/04/16 职场文书
关于观后感的作文
2015/06/18 职场文书
大学生受助感言
2015/08/01 职场文书