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 MD5文件生成码
Jan 12 Python
python文件写入实例分析
Apr 08 Python
详解Python的Django框架中的模版相关知识
Jul 15 Python
python同时遍历数组的索引和值的实例
Nov 15 Python
Python使用pyserial进行串口通信的实例
Jul 02 Python
Python 最强编辑器详细使用指南(PyCharm )
Sep 16 Python
python库matplotlib绘制坐标图
Oct 18 Python
Tensorflow分批量读取数据教程
Feb 07 Python
django queryset 去重 .distinct()说明
May 19 Python
Python -m参数原理及使用方法解析
Aug 21 Python
Python根据字符串调用函数过程解析
Nov 05 Python
Python还能这么玩之用Python修改了班花的开机密码
Jun 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
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
2012/07/31 PHP
Yii2 输出xml格式数据的方法
2016/05/03 PHP
Yii框架使用魔术方法实现跨文件调用功能示例
2017/05/20 PHP
laravel5.4生成验证码的实例讲解
2017/08/05 PHP
EXT中xtype的含义分析
2010/01/07 Javascript
JavaScript高级程序设计(第三版)学习笔记6、7章
2016/03/11 Javascript
JavaScript数据结构之链表的实现
2017/03/19 Javascript
用Webpack构建Vue项目的实践
2017/11/07 Javascript
jQuery Raty星级评分插件使用方法实例分析
2019/11/25 jQuery
vue单文件组件无法获取$refs的问题
2020/06/24 Javascript
Threejs实现滴滴官网首页地球动画功能
2020/07/13 Javascript
python+mysql实现学生信息查询系统
2019/02/21 Python
Python队列RabbitMQ 使用方法实例记录
2019/08/05 Python
python3 map函数和filter函数详解
2019/08/26 Python
Python数据正态性检验实现过程
2020/04/18 Python
python中adb有什么功能
2020/06/07 Python
Django缓存Cache使用详解
2020/11/30 Python
纯css3无js实现的Android Logo(有简单动画)
2013/01/21 HTML / CSS
浅谈css3中calc在less编译时被计算的解决办法
2017/12/04 HTML / CSS
某IT外企面试题-二分法求方程!看看大家的C++功底
2015/07/04 面试题
常用UNIX 命令(Linux的常用命令)
2013/07/10 面试题
资产评估专业学生的自我鉴定
2013/11/14 职场文书
爷爷追悼会答谢词
2014/01/24 职场文书
生产部厂长职位说明书
2014/03/03 职场文书
献爱心标语
2014/06/21 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
邹越感恩父母演讲稿
2014/08/28 职场文书
普通党员对照检查材料
2014/09/24 职场文书
委托培训协议书
2014/11/17 职场文书
先进教师个人事迹材料
2014/12/15 职场文书
公司周年庆典致辞
2015/07/30 职场文书
2016幼儿园中班开学寄语
2015/12/03 职场文书
新学期开学寄语2016
2015/12/04 职场文书
《藏戏》教学反思
2016/02/23 职场文书
Python Pygame实战在打砖块游戏的实现
2022/03/17 Python
教你使用Jenkins集成Harbor自动发布镜像
2022/04/03 Servers