对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 相关文章推荐
pyv8学习python和javascript变量进行交互
Dec 04 Python
关于Python中异常(Exception)的汇总
Jan 18 Python
Python 3.x读写csv文件中数字的方法示例
Aug 29 Python
python多进程使用及线程池的使用方法代码详解
Oct 24 Python
Python爬取商家联系电话以及各种数据的方法
Nov 10 Python
python 定时器,实现每天凌晨3点执行的方法
Feb 20 Python
浅析Python3中的对象垃圾收集机制
Jun 06 Python
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
Aug 04 Python
Python迭代器模块itertools使用原理解析
Dec 11 Python
解决TensorFlow模型恢复报错的问题
Feb 06 Python
Pytorch使用shuffle打乱数据的操作
May 20 Python
分析Python list操作为什么会错误
Nov 17 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
微信公众平台天气预报功能开发
2014/07/06 PHP
跟我学Laravel之配置Laravel
2014/10/15 PHP
php判断表是否存在的方法
2015/06/18 PHP
PHP传值到不同页面的三种常见方式及php和html之间传值问题
2015/11/19 PHP
php支付宝在线支付接口开发教程
2016/09/19 PHP
不能再简单的无闪刷新验证码原理很简单
2007/11/05 Javascript
ASP.NET中AJAX 调用实例代码
2012/05/03 Javascript
js调试系列 初识控制台
2014/06/18 Javascript
jquery+javascript编写国籍控件
2015/02/12 Javascript
详解JavaScript中数组和字符串的lastIndexOf()方法使用
2016/03/13 Javascript
Vue组件tree实现树形菜单
2017/04/13 Javascript
JavaScript截屏功能的实现代码
2017/07/28 Javascript
seajs模块压缩问题与解决方法实例分析
2017/10/10 Javascript
nodejs实现大文件(在线视频)的读取
2020/10/16 NodeJs
p5.js入门教程之鼠标交互的示例
2018/03/16 Javascript
详解angular2 控制视图的封装模式
2018/12/27 Javascript
axios实现文件上传并获取进度
2020/03/25 Javascript
VUE实现自身整体组件销毁的示例代码
2020/01/13 Javascript
[02:04]2016国际邀请赛中国区预选赛VG.R晋级之路
2016/07/01 DOTA
python获取文件版本信息、公司名和产品名的方法
2014/10/05 Python
Python探索之创建二叉树
2017/10/25 Python
python定向爬取淘宝商品价格
2018/02/27 Python
python实现读Excel写入.txt的方法
2018/04/29 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
2019/06/18 Python
Django框架自定义模型管理器与元选项用法分析
2019/07/22 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
2019/08/08 Python
python yield和Generator函数用法详解
2020/02/10 Python
Python定时器线程池原理详解
2020/02/26 Python
CSS3制作文字半透明倒影效果的两种实现方式
2014/08/08 HTML / CSS
五款漂亮的纯CSS3动画按钮的实例教程
2014/11/21 HTML / CSS
c语言常见笔试题总结
2016/09/05 面试题
财务会计实训报告
2014/11/05 职场文书
2014年图书室工作总结
2014/12/09 职场文书
导游词之河姆渡遗址博物馆
2019/10/10 职场文书
我对PyTorch dataloader里的shuffle=True的理解
2021/05/20 Python
python​格式化字符串
2022/04/20 Python