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 23 Python
Python脚本实现虾米网签到功能
Apr 12 Python
django用户注册、登录、注销和用户扩展的示例
Mar 19 Python
python实现搜索文本文件内容脚本
Jun 22 Python
pygame游戏之旅 计算游戏中躲过的障碍数量
Nov 20 Python
解决pycharm remote deployment 配置的问题
Jun 27 Python
Python如何实现在字符串里嵌入双引号或者单引号
Mar 02 Python
python 双循环遍历list 变量判断代码
May 04 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
May 22 Python
使用Keras预训练好的模型进行目标类别预测详解
Jun 27 Python
python通用数据库操作工具 pydbclib的使用简介
Dec 21 Python
Python 求向量的余弦值操作
Mar 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
Php部分常见问题总结
2006/10/09 PHP
PHP 数字左侧自动补0
2008/03/31 PHP
实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
2014/08/20 PHP
php语言中使用json的技巧及json的实现代码详解
2015/10/27 PHP
thinkphp5框架前后端分离项目实现分页功能的方法分析
2019/10/08 PHP
Thinkphp极验滑动验证码实现步骤解析
2020/11/24 PHP
让JavaScript 轻松支持函数重载 (Part 1 - 设计)
2009/08/04 Javascript
jQuery ajax(复习)—Baidu ajax request分离版
2013/01/24 Javascript
用box固定长宽实现图片自动轮播js代码
2014/06/09 Javascript
javascript定义变量时加var与不加var的区别
2014/12/22 Javascript
浅析jQuery Ajax通用js封装
2016/06/22 Javascript
jQuery实现的放大镜效果示例
2016/09/13 Javascript
JavaScript事件用法浅析
2016/10/31 Javascript
js 轮播效果实例分享
2016/12/28 Javascript
详解js中==与===的区别
2017/01/08 Javascript
实例分析nodejs模块xml2js解析xml过程中遇到的坑
2017/03/18 NodeJs
基于js中style.width与offsetWidth的区别(详解)
2017/11/12 Javascript
js实现手机web图片左右滑动效果
2017/12/29 Javascript
JS实现生成由字母与数字组合的随机字符串功能详解
2018/05/25 Javascript
Puppet的一些技巧
2018/09/17 Javascript
JS实现数组删除指定元素功能示例
2019/06/05 Javascript
js实现直播点击飘心效果
2020/08/19 Javascript
vue中解决chrome浏览器自动播放音频和MP3语音打包到线上的实现方法
2020/10/09 Javascript
[01:20]DOTA2上海特级锦标赛现场采访:谁的ID最受青睐
2016/03/25 DOTA
Python进程通信之匿名管道实例讲解
2015/04/11 Python
浅谈Python中重载isinstance继承关系的问题
2018/05/04 Python
使用Python监控文件内容变化代码实例
2018/06/04 Python
python读出当前时间精度到秒的代码
2019/07/05 Python
Pandas 解决dataframe的一列进行向下顺移问题
2019/12/27 Python
python实现ssh及sftp功能(实例代码)
2020/03/16 Python
html5 兼容IE6结构的实现代码
2012/05/14 HTML / CSS
如何开启linux的ssh服务
2015/02/14 面试题
鸿星尔克广告词
2014/03/21 职场文书
节水倡议书范文
2014/04/15 职场文书
法制宣传月活动方案
2014/05/11 职场文书
MySQL 四种连接和多表查询详解
2021/07/16 MySQL