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获取本地计算机名字的方法
Apr 29 Python
Python编程中time模块的一些关键用法解析
Jan 19 Python
整理Python 常用string函数(收藏)
May 30 Python
apache部署python程序出现503错误的解决方法
Jul 24 Python
Python中文件的读取和写入操作
Apr 27 Python
Python设计模式之解释器模式原理与用法实例分析
Jan 10 Python
10 分钟快速入门 Python3的教程
Jan 29 Python
python Gunicorn服务器使用方法详解
Jul 22 Python
Python脚本操作Excel实现批量替换功能
Nov 20 Python
Python GUI编程学习笔记之tkinter事件绑定操作详解
Mar 30 Python
Python xlrd模块导入过程及常用操作
Jun 10 Python
python 对象真假值的实例(哪些视为False)
Dec 11 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
从网上搜到的phpwind 0day的代码
2006/12/07 PHP
PHPMailer安装方法及简单实例
2008/11/25 PHP
Uchome1.2 1.5 代码学习 common.php
2009/04/24 PHP
thinkphp 手机号和用户名同时登录
2017/01/20 PHP
用AJAX返回HTML片段中的JavaScript脚本
2010/01/04 Javascript
MooBox 基于Mootools的对话框插件
2012/01/20 Javascript
详解JavaScript中的every()方法
2015/06/08 Javascript
Javascript实现图片轮播效果(二)图片序列节点的控制实现
2016/02/17 Javascript
基于zepto的移动端轻量级日期插件--date_picker
2016/03/04 Javascript
JS创建事件的三种方法(实例代码)
2016/05/12 Javascript
Javascript 动态改变imput type属性
2016/11/01 Javascript
Jquery与Bootstrap实现后台管理页面增删改查功能示例
2017/01/22 Javascript
vue几个常用跨域处理方式介绍
2018/02/07 Javascript
Vue 实现双向绑定的四种方法
2018/03/16 Javascript
vue cli使用融云实现聊天功能的实例代码
2019/04/19 Javascript
解决qrcode.js生成二维码时必须定义一个空div的问题
2020/07/09 Javascript
python脚本实现统计日志文件中的ip访问次数代码分享
2014/08/06 Python
从Python程序中访问Java类的简单示例
2015/04/20 Python
python 实时遍历日志文件
2016/04/12 Python
python检测服务器端口代码实例
2019/08/31 Python
python 求定积分和不定积分示例
2019/11/20 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
2020/02/17 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
2020/04/24 Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
2020/05/17 Python
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
2021/01/22 Python
CSS3实现可翻转的hover效果
2018/05/23 HTML / CSS
英国最大的在线运动补充剂商店:Discount Supplements
2017/06/03 全球购物
英国最大的在线快递公司之一:ParcelHero
2019/11/04 全球购物
如何理解委托
2012/01/06 面试题
网上卖盒饭创业计划书
2014/01/26 职场文书
学习礼仪心得体会
2014/09/01 职场文书
幼儿园教师的自我评价范文
2014/09/17 职场文书
2014年档案管理员工作总结
2014/12/01 职场文书
《雪域豹影》读后感:父爱的伟大
2019/12/23 职场文书
Python进度条的使用
2021/05/17 Python
SpringBoot接入钉钉自定义机器人预警通知
2022/07/15 Java/Android