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中使用sys模板和logging模块获取行号和函数名的方法
Apr 15 Python
Python获取邮件地址的方法
Jul 10 Python
Python 常用string函数详解
May 30 Python
PyCharm使用教程之搭建Python开发环境
Jun 07 Python
简单讲解Python编程中namedtuple类的用法
Jun 21 Python
Python绑定方法与非绑定方法详解
Aug 18 Python
Python有序查找算法之二分法实例分析
Dec 11 Python
Python测试网络连通性示例【基于ping】
Aug 03 Python
python-django中的APPEND_SLASH实现方法
Jun 21 Python
浅析python,PyCharm,Anaconda三者之间的关系
Nov 27 Python
TensorFlow 显存使用机制详解
Feb 03 Python
推荐8款常用的Python GUI图形界面开发框架
Feb 23 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
ThinkPHP的L方法使用简介
2014/06/18 PHP
PHP函数checkdnsrr用法详解(Windows平台用法)
2016/03/21 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
2017/07/09 PHP
jQuery中获取Radio元素值的方法
2013/07/02 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
Jquery easyUI 更新行示例
2014/03/06 Javascript
浅析javascript的间隔调用和延时调用
2014/11/12 Javascript
jQuery插件Tmpl的简单使用方法
2015/04/27 Javascript
Bootstrap每天必学之表格
2015/11/23 Javascript
Bootstrap轮播插件简单使用方法介绍
2016/06/21 Javascript
如何提高javascript加载速度
2016/12/26 Javascript
jQuery密码强度验证控件使用详解
2017/01/05 Javascript
原生js实现回复评论功能
2017/01/18 Javascript
微信小程序中hidden不生效原因的解决办法
2017/04/26 Javascript
AngularJS常见过滤器用法实例总结
2017/07/06 Javascript
Layui组件Table绑定行点击事件和获取行数据的方法
2018/08/19 Javascript
Vue.js实现备忘录功能
2019/06/26 Javascript
使用layer弹窗,制作编辑User信息页面的方法
2019/09/27 Javascript
Element-UI+Vue模式使用总结
2020/01/02 Javascript
JS前后端实现身份证号验证代码解析
2020/07/23 Javascript
再谈Python中的字符串与字符编码(推荐)
2016/12/14 Python
Python3 socket同步通信简单示例
2017/06/07 Python
在python中只选取列表中某一纵列的方法
2018/11/28 Python
详解Python中的正斜杠与反斜杠
2019/08/09 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
2020/03/30 Python
html5定位获取当前位置并在百度地图上显示
2014/08/22 HTML / CSS
英国最大的电子产品和家电零售企业:Currys PC World
2016/09/24 全球购物
介绍一下EJB的分类及其各自的功能及应用
2016/08/23 面试题
小学模范班主任事迹材料
2014/05/13 职场文书
机械设计专业大学生职业生涯规划书范文
2014/09/13 职场文书
政协委员个人总结
2015/03/03 职场文书
辛亥革命观后感
2015/06/02 职场文书
PostgreSQL存储过程实用脚本(二):创建函数入门
2021/04/05 PostgreSQL
解决mysql模糊查询索引失效问题的几种方法
2021/06/18 MySQL
《地。-关于地球的运动-》单行本第七集上市,小说家朝井辽献上期待又害怕的推荐文
2022/03/31 日漫
Spring 使用注解开发
2022/05/20 Java/Android