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的Django框架中simple-todo工具的简单使用
May 30 Python
python使用itchat库实现微信机器人(好友聊天、群聊天)
Jan 04 Python
Python使用requests发送POST请求实例代码
Jan 25 Python
python 实现视频流下载保存MP4的方法
Jan 09 Python
Python元组知识点总结
Feb 18 Python
Python从函数参数类型引出元组实例分析
May 28 Python
浅谈Pytorch torch.optim优化器个性化的使用
Feb 20 Python
Windows下Anaconda和PyCharm的安装与使用详解
Apr 23 Python
python 使用三引号时容易犯的小错误
Oct 21 Python
python中二分查找法的实现方法
Dec 06 Python
python爬取2021猫眼票房字体加密实例
Feb 19 Python
python 多态 协议 鸭子类型详解
Nov 27 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
MySql中正则表达式的使用方法描述
2008/07/30 PHP
PHP 读取文本文件内容并分页显示
2016/01/02 PHP
PHP多进程编程总结(推荐)
2016/07/18 PHP
php删除二维数组中的重复值方法
2018/03/12 PHP
PHP排序算法之归并排序(Merging Sort)实例详解
2018/04/21 PHP
Jquery 获得服务器控件值的方法小结
2010/05/11 Javascript
Prototype框架详解
2015/11/25 Javascript
jQuery实现的表头固定效果实例【附完整demo源码下载】
2016/08/01 Javascript
DOM 事件的深入浅出(二)
2016/12/05 Javascript
jQuery实现图片滑动效果
2017/03/08 Javascript
深入理解vue2.0路由如何配置问题
2017/07/18 Javascript
nodejs对express中next函数的一些理解
2017/09/08 NodeJs
nodejs微信开发之授权登录+获取用户信息
2019/03/17 NodeJs
详解vue使用$http服务端收不到参数
2019/04/19 Javascript
JS中的算法与数据结构之集合(Set)实例详解
2019/08/20 Javascript
vue-router重写push方法,解决相同路径跳转报错问题
2020/08/07 Javascript
arcgis.js控制地图地体的显示范围超出区域自动弹回(实现思路)
2021/01/28 Javascript
python自动化测试之连接几组测试包实例
2014/09/28 Python
Python的collections模块中的OrderedDict有序字典
2016/07/07 Python
Python3实现发送QQ邮件功能(文本)
2017/12/15 Python
Python实现的查询mysql数据库并通过邮件发送信息功能
2018/05/17 Python
PyCharm设置SSH远程调试的方法
2018/07/17 Python
win10下tensorflow和matplotlib安装教程
2018/09/19 Python
python实现感知机线性分类模型示例代码
2019/06/02 Python
解决Tensorboard 不显示计算图graph的问题
2020/02/15 Python
Python ckeditor富文本编辑器代码实例解析
2020/06/22 Python
Python描述数据结构学习之哈夫曼树篇
2020/09/07 Python
python 牛顿法实现逻辑回归(Logistic Regression)
2020/10/15 Python
Python爬取梨视频的示例
2021/01/29 Python
canvas绘制视频封面的方法
2018/02/05 HTML / CSS
巴西葡萄酒销售网站:Wine.com.br
2017/11/07 全球购物
老板电器官方购物商城:老板油烟机、燃气灶、消毒柜、电烤箱
2018/05/30 全球购物
庆祝国庆节演讲稿2014
2014/09/19 职场文书
党的群众路线教育实践活动组织生活会发言材料
2014/10/17 职场文书
公开致歉信
2019/06/24 职场文书
浅析Python中的套接字编程
2021/06/22 Python