对Python3之进程池与回调函数的实例详解


Posted in Python onJanuary 22, 2019

进程池

代码演示

方式一

from multiprocessing import Pool


def deal_task(n):
 n -= 1
 return n


if __name__ == '__main__':
 n = 10
 p = Pool(4)
 for i in range(4):
  res = p.apply(deal_task, args=(n,))
  #调用apply是一个串行的效果,任务会被进程一个一个的处理,直接得到结果
  #前提是执行的任务必须要有返回值
  print(res)

方式二

from multiprocessing import Pool


def deal_task(n):
 n -= 1
 return n


if __name__ == '__main__':
 n = 10
 p = Pool(4)
 obj_l = []
 for i in range(4):
  #调用apply_async会返回一个对象,主进程会不断扔任务给线程池,让子线程处理
  obj = p.apply_async(deal_task, args=(n,))
  obj_l.append(obj)
 #首先函数要有返回值
 #调用close目的是防止join期间会有别的任务被添加到任务列表中
 #不调用close会报错
 p.close()
 p.join()
 #join是要让子进程全部处理完之后得到结果统一处理,还有一个非常重要的原因是进程池依附于主进程,主进程结束,进程池消失。进程池的任务没有被处理程序就结束了。
 for obj in obj_l:
  print(obj.get())

方式三

from multiprocessing import Pool

import requests


def get_page(url):
 ret = requests.get(url).text
 return {'url': url, 'ret': ret}


def parse_page(ret):
 with open('ab.txt', 'a') as f:
  f.write('%s - %s\n' % (ret['url'], len(ret['ret'])))


if __name__ == '__main__':
 urls = [
  'https://www.baidu.com',
  'http://www.openstack.org',
  'https://www.python.org',
  'https://help.github.com/',
  'http://www.sina.com.cn/'
 ]
 p = Pool()
 for url in urls:
  #使用回调函数,当get_page下载完后,主线程调用parse_page自动处理get_page下载的结果,节省了parse_page的时间,该场景用于一个函数为耗时操作并且产生数据,另一个函数是非耗时操作,这样就节省了非耗时操作函数的时间
  p.apply_async(get_page, args=(url,), callback=parse_page)

 p.close()
 p.join()
 print('主')

join是要让子进程全部处理完之后得到结果统一处理,还有一个非常重要的原因是进程池依附于主进程,主进程结束,进程池消失。进程池的任务没有被处理程序就结束了。

以上这篇对Python3之进程池与回调函数的实例详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python语言编写电脑时间自动同步小工具
Mar 08 Python
pycharm 使用心得(三)Hello world!
Jun 05 Python
简述Python中的面向对象编程的概念
Apr 27 Python
在Python中用has_key()方法查找键是否存在的教程
May 21 Python
python实现判断数组是否包含指定元素的方法
Jul 15 Python
Python类的动态修改的实例方法
Mar 24 Python
不可错过的十本Python好书
Jul 06 Python
python实现图像检索的三种(直方图/OpenCV/哈希法)
Aug 08 Python
基于Python实现剪切板实时监控方法解析
Sep 11 Python
Python collections.defaultdict模块用法详解
Jun 18 Python
Node.js 和 Python之间该选择哪个?
Aug 05 Python
Python实现自动签到脚本功能
Aug 20 Python
python多任务及返回值的处理方法
Jan 22 #Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
Jan 22 #Python
python自动发送测试报告邮件功能的实现
Jan 22 #Python
python3去掉string中的标点符号方法
Jan 22 #Python
在Python中将函数作为另一个函数的参数传入并调用的方法
Jan 22 #Python
python3.4爬虫demo
Jan 22 #Python
使用Template格式化Python字符串的方法
Jan 22 #Python
You might like
PHP has encountered an Access Violation
2007/01/15 PHP
PHP从FLV文件获取视频预览图的方法
2015/03/12 PHP
php获取访问者IP地址汇总
2015/04/24 PHP
PHP中set_include_path()函数相关用法分析
2016/07/18 PHP
Some tips of wmi scripting in jscript (1)
2007/04/03 Javascript
让浏览器非阻塞加载javascript的几种方法小结
2011/04/25 Javascript
JS实现的省份级联实例代码
2013/06/24 Javascript
jquery中获取id值方法小结
2013/09/22 Javascript
javascript实现的一个带下拉框功能的文本框
2014/05/08 Javascript
javascript实现鼠标放上后下边对应内容变换的效果
2015/08/06 Javascript
基于node实现websocket协议
2016/04/25 Javascript
jQuery实现的放大镜效果示例
2016/09/13 Javascript
JQuery手速测试小游戏实现思路详解
2016/09/20 Javascript
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
2017/03/04 Javascript
PHP实现记录代码运行时间封装类实例教程
2017/05/08 Javascript
深入理解vue中的$set
2017/06/01 Javascript
详解vue中组件参数
2018/07/09 Javascript
angularJS自定义directive之带参方法传递详解
2018/10/09 Javascript
vue-router权限控制(简单方式)
2018/10/29 Javascript
vue+moment实现倒计时效果
2019/08/26 Javascript
uni app仿微信顶部导航条功能
2019/09/17 Javascript
d3.js 地铁轨道交通项目实战
2019/11/27 Javascript
使用JS实现动态时钟
2020/03/12 Javascript
[58:58]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第二场
2018/04/05 DOTA
python批量修改图片大小的方法
2018/07/24 Python
Python sorted函数详解(高级篇)
2018/09/18 Python
Python编程图形库之Pillow使用方法讲解
2018/12/28 Python
对python指数、幂数拟合curve_fit详解
2018/12/29 Python
基于Python2、Python3中reload()的不同用法介绍
2019/08/12 Python
python中的subprocess.Popen()使用详解
2019/12/25 Python
大学生创业计划书的格式要求
2013/12/29 职场文书
项目管理计划书
2014/01/09 职场文书
大型活动组织方案
2014/05/10 职场文书
中秋节国旗下演讲稿
2014/09/13 职场文书
2014年加油站工作总结
2014/12/04 职场文书
教师求职自荐信范文
2015/03/04 职场文书