对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抽象类的新写法
Jun 18 Python
numpy中实现二维数组按照某列、某行排序的方法
Apr 04 Python
python3解析库BeautifulSoup4的安装配置与基本用法
Jun 26 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
Oct 16 Python
Python字典循环添加一键多值的用法实例
Jan 20 Python
Python中时间datetime的处理与转换用法总结
Feb 18 Python
Python 虚拟空间的使用代码详解
Jun 10 Python
python2 对excel表格操作完整示例
Feb 23 Python
Python类super()及私有属性原理解析
Jun 15 Python
python与c语言的语法有哪些不一样的
Sep 13 Python
浅谈Python项目的服务器部署
Apr 25 Python
pytorch model.cuda()花费时间很长的解决
Jun 01 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
解决控件遮挡问题:关于有窗口元素和无窗口元素
2007/01/28 PHP
destoon切换城市后实现logo旁边显示地区名称的方法
2014/08/21 PHP
php生成html文件方法总结
2014/12/01 PHP
php编程实现简单的网页版计算器功能示例
2017/04/26 PHP
如果文字过长,则将过长的部分变成省略号显示
2006/06/26 Javascript
JavaScript 常见对象类创建代码与优缺点分析
2009/12/07 Javascript
JavaScript面向对象程序设计三 原型模式(上)
2011/12/21 Javascript
JSON为什么那样红为什么要用json(另有洞天)
2012/12/26 Javascript
jQuery模拟点击A标记示例参考
2014/04/17 Javascript
jquery使用正则表达式验证email地址的方法
2015/01/22 Javascript
JS模拟实现Select效果代码
2015/09/24 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
2016/07/28 Javascript
jQuery Ajax 异步加载显示等待效果代码分享
2016/08/01 Javascript
bootstrap监听滚动实现头部跟随滚动
2016/11/08 Javascript
JS常见简单正则表达式验证功能小结【手机,地址,企业税号,金额,身份证等】
2017/01/22 Javascript
js实现登录框鼠标拖拽效果
2017/03/09 Javascript
Promise扫盲贴
2019/06/24 Javascript
使用layui 的layedit定义自己的toolbar方法
2019/09/18 Javascript
jQuery 淡入/淡出效果函数用法分析
2020/05/19 jQuery
Vue-Ant Design Vue-普通及自定义校验实例
2020/10/24 Javascript
常用python数据类型转换函数总结
2014/03/11 Python
Python学习笔记(二)基础语法
2014/06/06 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
2018/06/20 Python
python中yield的用法详解——最简单,最清晰的解释
2019/04/04 Python
python被修饰的函数消失问题解决(基于wraps函数)
2019/11/04 Python
手把手教你进行Python虚拟环境配置教程
2020/02/03 Python
解决pycharm同一目录下无法import其他文件
2020/02/12 Python
大二自我鉴定范文
2013/10/05 职场文书
应届毕业生求职信
2013/11/30 职场文书
即将毕业大学生自荐信
2014/01/24 职场文书
《小小雨点》教学反思
2014/02/18 职场文书
报纸媒体创意广告词
2014/03/17 职场文书
大学生创业计划书
2014/08/14 职场文书
购房意向书
2014/08/30 职场文书
员工自我工作评价
2015/03/06 职场文书
2019请假条的基本格式及范文!
2019/07/05 职场文书