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 22 Python
Python中optionParser模块的使用方法实例教程
Aug 29 Python
Python实现Logger打印功能的方法详解
Sep 01 Python
浅谈Django自定义模板标签template_tags的用处
Dec 20 Python
解决pip install的时候报错timed out的问题
Jun 12 Python
python二维列表一维列表的互相转换实例
Jul 02 Python
python 将print输出的内容保存到txt文件中
Jul 17 Python
Python之inspect模块实现获取加载模块路径的方法
Oct 16 Python
对Django url的几种使用方式详解
Aug 06 Python
opencv python如何实现图像二值化
Feb 03 Python
浅谈django不使用restframework自定义接口与使用的区别
Jul 15 Python
python中加背景音乐如何操作
Jul 19 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图片的二进制转换实现方法
2014/12/15 PHP
PHP+Ajax验证码验证用户登录
2016/07/20 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
2020/01/26 PHP
Javascript 键盘事件的组合使用实现代码
2012/05/04 Javascript
JS通过相同的name进行表格求和代码
2013/08/18 Javascript
js插件方式打开pdf文件(浏览器pdf插件分享)
2013/12/20 Javascript
jQuery中offset()方法用法实例
2015/01/16 Javascript
深入理解JavaScript系列(37):设计模式之享元模式详解
2015/03/04 Javascript
AngularJS进行性能调优的7个建议
2015/12/28 Javascript
AngualrJS中每次$http请求时的一个遮罩层Directive
2016/01/26 Javascript
Javascript 函数的四种调用模式
2016/11/05 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
2017/06/13 Javascript
JavaScript解决浮点数计算不准确问题的方法分析
2018/07/09 Javascript
jQuery实现的淡入淡出图片轮播效果示例
2018/08/29 jQuery
[02:12]打造更好的电竞完美世界:完美盛典回顾篇
2018/12/19 DOTA
linux系统使用python监控apache服务器进程脚本分享
2014/01/15 Python
Python实现感知器模型、两层神经网络
2017/12/19 Python
Python实现PS滤镜中马赛克效果示例
2018/01/20 Python
python tornado使用流生成图片的例子
2019/11/18 Python
Python线程障碍对象Barrier原理详解
2019/12/02 Python
python psutil监控进程实例
2019/12/17 Python
Python loguru日志库之高效输出控制台日志和日志记录
2020/03/07 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
2020/06/30 Python
python 如何使用find和find_all爬虫、找文本的实现
2020/10/16 Python
利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境
2020/11/01 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
2020/11/18 Python
Python爬虫自动化爬取b站实时弹幕实例方法
2021/01/26 Python
大学本科生的个人自我评价
2013/12/09 职场文书
标准自荐信范文
2014/01/29 职场文书
心理学专业大学生职业生涯规划范文
2014/02/19 职场文书
医德医风自我评价
2014/09/19 职场文书
紧急通知
2015/04/17 职场文书
React Hook用法示例详解(6个常见hook)
2021/04/28 Javascript
十大最帅动漫男主 碓冰拓海上榜,第一是《灌篮高手》男主角
2022/03/18 日漫
python模拟浏览器 使用selenium进入好友QQ空间并留言
2022/04/12 Python
Python Flask实现进度条
2022/05/11 Python