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 26 Python
Python数据结构与算法之图结构(Graph)实例分析
Sep 05 Python
Python实现一个简单的验证码程序
Nov 03 Python
Python实现将json文件中向量写入Excel的方法
Mar 26 Python
深入解析神经网络从原理到实现
Jul 26 Python
Numpy数组array和矩阵matrix转换方法
Aug 05 Python
python基于pdfminer库提取pdf文字代码实例
Aug 15 Python
详解Python time库的使用
Oct 10 Python
超实用的 30 段 Python 案例
Oct 10 Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
Feb 16 Python
Python使用文件操作实现一个XX信息管理系统的示例
Jul 02 Python
python识别围棋定位棋盘位置
Jul 26 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生成随机密码的三种方法小结
2010/09/04 PHP
关于php curl获取301或302转向的网址问题的解决方法
2011/06/02 PHP
win7 64位系统 配置php最新版开发环境(php+Apache+mysql)
2014/08/15 PHP
ThinkPHP实现支付宝接口功能实例
2014/12/02 PHP
php支付宝在线支付接口开发教程
2016/09/19 PHP
PHP页面跳转实现延时跳转的方法
2016/12/10 PHP
PHP实现文件上传与下载
2020/08/28 PHP
js中 关于undefined和null的区别介绍
2013/04/16 Javascript
jQuery中filter()方法用法实例
2015/01/06 Javascript
js预加载图片方法汇总
2015/06/15 Javascript
Bootstrap每天必学之媒体对象
2015/11/30 Javascript
jquery.validate 自定义验证方法及validate相关参数
2016/01/18 Javascript
对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache详解
2016/04/11 Javascript
jquery删除table当前行的实例代码
2016/10/07 Javascript
jQuery remove()过滤被删除的元素(推荐)
2017/07/18 jQuery
JavaScript中Require调用js的实例分享
2017/10/27 Javascript
纯js封装的ajax功能函数与用法示例
2018/05/14 Javascript
以v-model与promise两种方式实现vue弹窗组件
2018/05/21 Javascript
Vue实现按钮旋转和移动位置的实例代码
2018/08/09 Javascript
vue keep-alive 动态删除组件缓存的例子
2019/11/04 Javascript
简单了解JavaScript sort方法
2019/11/25 Javascript
JavaScript Window窗口对象属性和使用方法
2020/01/19 Javascript
[03:42]2014DOTA2国际邀请赛 第三日比赛排位扑朔迷离
2014/07/12 DOTA
python中将阿拉伯数字转换成中文的实现代码
2011/05/19 Python
python生成日历实例解析
2014/08/21 Python
使用graphics.py实现2048小游戏
2015/03/10 Python
python 的 scapy库,实现网卡收发包的例子
2019/07/23 Python
python数据类型可变不可变知识点总结
2020/03/06 Python
Python Process创建进程的2种方法详解
2021/01/25 Python
深入理解Python变量的数据类型和存储
2021/02/01 Python
J.Crew官网:美国知名休闲服装品牌
2017/05/19 全球购物
安全生产检查通报
2014/01/29 职场文书
平安建设实施方案
2014/03/19 职场文书
搞笑婚前保证书
2015/02/28 职场文书
社区青年志愿者活动总结
2015/05/06 职场文书
教师节校长致辞
2015/07/31 职场文书