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的几种开发工具介绍
Mar 07 Python
python实现TCP服务器端与客户端的方法详解
Apr 30 Python
在Python中操作列表之List.pop()方法的使用
May 21 Python
Python正则简单实例分析
Mar 21 Python
带你了解python装饰器
Jun 15 Python
Django跨域请求问题的解决方法示例
Jun 16 Python
Python 类的特殊成员解析
Jun 20 Python
Python对象中__del__方法起作用的条件详解
Nov 01 Python
对Python实现累加函数的方法详解
Jan 23 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
Nov 30 Python
Python Numpy库常见用法入门教程
Jan 16 Python
Python MySQLdb 执行sql语句时的参数传递方式
Mar 04 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中GET变量的使用
2006/10/09 PHP
用php随机生成福彩双色球号码的2种方法
2013/02/04 PHP
解析php安全性问题中的:Null 字符问题
2013/06/21 PHP
php 字符串压缩方法比较示例
2014/01/23 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
JS获取URL中参数值(QueryString)的4种方法分享
2014/04/12 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
深入理解js promise chain
2016/05/05 Javascript
JavaScript数据类型转换的注意事项
2016/07/31 Javascript
php main 与 iframe 相互通讯类(js+php同域/跨域)
2017/09/14 Javascript
AngularJS 应用模块化的使用
2018/04/04 Javascript
jQuery创建及操作xml格式数据示例
2018/05/26 jQuery
js、jquery实现列表模糊搜索功能过程解析
2020/03/27 jQuery
vue中实现图片压缩 file文件的方法
2020/05/28 Javascript
[02:04]2020年夜魇暗潮预告片
2020/10/30 DOTA
Python中条件判断语句的简单使用方法
2015/08/21 Python
轻松实现python搭建微信公众平台
2016/02/16 Python
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
Python内建函数之raw_input()与input()代码解析
2017/10/26 Python
使用PyInstaller将python转成可执行文件exe笔记
2018/05/26 Python
Python SVM(支持向量机)实现方法完整示例
2018/06/19 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
2020/04/18 Python
Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法
2019/07/23 Python
澳大利亚网上玩具商店:Mr Toys Toyworld
2018/03/25 全球购物
加拿大床上用品、家居装饰、厨房和浴室产品购物网站:Linen Chest
2018/06/05 全球购物
Hotter Shoes美国官网:英国最受欢迎的舒适鞋
2018/08/02 全球购物
加拿大拼图大师:Puzzle Master
2020/12/28 全球购物
大学同学聚会邀请函
2014/01/19 职场文书
师范学院教师自荐书
2014/01/31 职场文书
幼师自我鉴定
2014/02/01 职场文书
高中军训感言200字
2014/02/23 职场文书
环境工程专业自荐信范文
2014/06/24 职场文书
科技工作者先进事迹
2014/08/16 职场文书
2014教师党员自我评议总结
2014/09/19 职场文书
销售辞职信范文
2015/03/02 职场文书
团支部组织委员竞选稿
2015/11/21 职场文书