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查询Mysql时返回字典结构的代码
Jun 18 Python
Python中的高级数据结构详解
Mar 27 Python
python异步编程 使用yield from过程解析
Sep 25 Python
使用python实现对元素的长截图功能
Nov 14 Python
python 列表、字典和集合的添加和删除操作
Dec 16 Python
PyCharm取消波浪线、下划线和中划线的实现
Mar 03 Python
python shell命令行中import多层目录下的模块操作
Mar 09 Python
如何在django中运行scrapy框架
Apr 22 Python
python3让print输出不换行的方法
Aug 24 Python
详解Anaconda 的安装教程
Sep 23 Python
Matplotlib中rcParams使用方法
Jan 05 Python
python实现经典排序算法的示例代码
Feb 07 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框架类库扩展操作示例
2019/11/26 PHP
用JavaScript事件串连执行多个处理过程的方法
2007/03/09 Javascript
jQuery Tools tab使用介绍
2012/07/14 Javascript
使用JavaScript 实现对象 匀速/变速运动的方法
2013/05/08 Javascript
JavaScript Array对象扩展indexOf()方法
2014/05/09 Javascript
用js读、写、删除Cookie代码分享及详细注释说明
2014/06/05 Javascript
浅谈javascript 函数内部属性
2015/01/21 Javascript
JQuery实现简单的图片滑动切换特效
2015/11/22 Javascript
javascript html5移动端轻松实现文件上传
2020/03/27 Javascript
AngularJs Scope详解及示例代码
2016/09/01 Javascript
Javascript 正则表达式校验数字的简单实例
2016/11/02 Javascript
Bootstrap 轮播(Carousel)插件
2016/12/26 Javascript
vue移动端微信授权登录插件封装的实例
2018/08/28 Javascript
JS执行控制之节流模式实例分析
2018/12/21 Javascript
vue 实现通过vuex 存储值 在不同界面使用
2019/11/11 Javascript
js实现整体缩放页面适配移动端
2020/03/31 Javascript
Vue项目配置跨域访问和代理proxy设置方式
2020/09/08 Javascript
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
python中解析json格式文件的方法示例
2017/05/03 Python
Python键盘输入转换为列表的实例
2018/06/23 Python
python Canny边缘检测算法的实现
2020/04/24 Python
python中使用.py配置文件的方法详解
2020/11/23 Python
如何用python实现一个HTTP连接池
2021/01/14 Python
GNC健安喜官方海外旗舰店:美国著名保健品牌
2017/01/04 全球购物
如何用SQL语句进行模糊查找
2015/09/25 面试题
简述DNS进行域名解析的过程
2013/12/02 面试题
应届专科生个人的自我评价
2014/01/05 职场文书
房地产还款计划书
2014/01/10 职场文书
学生拾金不昧表扬信
2014/01/21 职场文书
会计电算化毕业生自荐信
2014/03/03 职场文书
质量在我心中演讲稿
2014/09/02 职场文书
党员创先争优心得体会
2014/09/11 职场文书
优秀教师个人总结
2015/02/11 职场文书
遗嘱格式范本
2015/08/07 职场文书
小学一年级数学教学反思
2016/02/16 职场文书
go语言中fallthrough的用法说明
2021/05/06 Golang