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数据结构之Array用法实例
Oct 09 Python
Python使用内置json模块解析json格式数据的方法
Jul 20 Python
Python序列循环移位的3种方法推荐
Apr 09 Python
python3+PyQt5+Qt Designer实现堆叠窗口部件
Apr 20 Python
Python实现使用卷积提取图片轮廓功能示例
May 12 Python
对pycharm代码整体左移和右移缩进快捷键的介绍
Jul 16 Python
在Pandas中给多层索引降级的方法
Nov 16 Python
Python3中exp()函数用法分析
Feb 19 Python
python3爬虫学习之数据存储txt的案例详解
Apr 24 Python
python正则爬取某段子网站前20页段子(request库)过程解析
Aug 10 Python
Python基于pandas爬取网页表格数据
May 11 Python
Python3压缩和解压缩实现代码
Mar 01 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学习笔记 [预定义数组(超全局数组)]
2011/06/09 PHP
php实现singleton()单例模式实例
2014/11/06 PHP
PHP上传文件时自动分配路径的方法
2015/01/09 PHP
PHP的JSON封装、转变及输出操作示例
2019/09/27 PHP
javascript 限制输入脚本大全
2009/11/03 Javascript
基于jquery编写的横向自适应幻灯片切换特效的实例代码
2013/08/06 Javascript
JavaScript调用浏览器打印功能实例分析
2015/07/17 Javascript
js+css实现超简洁的二级下拉菜单效果代码
2015/09/07 Javascript
JS基于Mootools实现的个性菜单效果代码
2015/10/21 Javascript
javascript每日必学之条件分支
2016/02/17 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
2016/10/18 Javascript
9个让JavaScript调试更简单的Console命令
2016/11/14 Javascript
JS复制对应id的内容到粘贴板(Ctrl+C效果)
2017/01/23 Javascript
EasyUI创建人员树的实例代码
2017/09/15 Javascript
分享ES6的7个实用技巧
2018/01/18 Javascript
AngularJS 多指令Scope问题的解决
2018/10/25 Javascript
微信小程序动画(Animation)的实现及执行步骤
2018/10/28 Javascript
ng-zorro-antd 入门初体验
2018/12/03 Javascript
JavaScript简单编程实例学习
2020/02/14 Javascript
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
python函数形参用法实例分析
2015/08/04 Python
matplotlib绘制符合论文要求的图片实例(必看篇)
2017/06/02 Python
python如何把嵌套列表转变成普通列表
2018/03/20 Python
python3+PyQt5实现支持多线程的页面索引器应用程序
2018/04/20 Python
使用APScheduler3.0.1 实现定时任务的方法
2019/07/22 Python
python+requests实现接口测试的完整步骤
2020/10/27 Python
如何使用html5与css3完成google涂鸦动画
2012/12/16 HTML / CSS
canvas探照灯效果的示例代码
2018/11/30 HTML / CSS
Dyson加拿大官方网站:购买戴森吸尘器,风扇,冷热器及配件
2016/10/26 全球购物
印度最大的网上花店:Ferns N Petals(鲜花、礼品和蛋糕)
2017/10/16 全球购物
IRO美国官网:法国服装品牌
2018/03/06 全球购物
历史学专业大学生找工作的自我评价
2013/10/16 职场文书
教师党员岗位承诺书
2014/05/29 职场文书
2015年七一建党节慰问信
2015/03/23 职场文书
2016年法制宣传月活动总结
2016/04/01 职场文书
Python基本的内置数据类型及使用方法
2022/04/13 Python