对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新手经常遇到的17个错误分析
Jul 30 Python
python服务器与android客户端socket通信实例
Nov 12 Python
Python中json格式数据的编码与解码方法详解
Jul 01 Python
python使用itchat库实现微信机器人(好友聊天、群聊天)
Jan 04 Python
Python实现的视频播放器功能完整示例
Feb 01 Python
flask框架视图函数用法示例
Jul 19 Python
python可视化爬虫界面之天气查询
Jul 03 Python
使用OpenCV实现仿射变换—缩放功能
Aug 29 Python
Python SSL证书验证问题解决方案
Jan 13 Python
Python Sqlalchemy如何实现select for update
Oct 12 Python
python Matplotlib基础--如何添加文本和标注
Jan 26 Python
TensorFlow的环境配置与安装方法
Feb 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 404错误页面实现代码
2009/06/22 PHP
php截取utf-8中文字符串乱码的解决方法
2010/03/29 PHP
提高PHP编程效率的方法
2013/11/07 PHP
PHP实现适用于文件内容操作的分页类
2016/06/15 PHP
PHP简单预防sql注入的方法
2016/09/27 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
基于jQuery的仿flash的广告轮播代码
2010/11/04 Javascript
js实现双向链表互联网机顶盒实战应用实现
2011/10/28 Javascript
Jquery命名冲突解决的五种方案分享
2012/03/16 Javascript
js判断浏览器类型的方法
2013/08/07 Javascript
给事件响应函数传参数的四种方式小结
2013/12/05 Javascript
JS给Textarea文本框添加行号的方法
2015/08/20 Javascript
谷歌showModalDialog()方法不兼容出现对话窗口的解决办法
2016/02/15 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
2016/04/30 Javascript
详解动画插件wow.js的使用方法
2017/09/13 Javascript
微信小程序支付之c#后台实现方法
2017/10/19 Javascript
Spring boot 和Vue开发中CORS跨域问题解决
2018/09/05 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
2018/10/19 Javascript
JavaScript变量提升和严格模式实例分析
2019/01/27 Javascript
详解vue高级特性
2020/06/09 Javascript
JavaScript canvas实现文字时钟
2021/01/10 Javascript
关于element的表单组件整理笔记
2021/02/05 Javascript
Python 文件重命名工具代码
2009/07/26 Python
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
2018/07/12 Python
scrapy-redis的安装部署步骤讲解
2019/02/27 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
2020/04/08 Python
Python稀疏矩阵及参数保存代码实现
2020/04/18 Python
Python 列表中的修改、添加和删除元素的实现
2020/06/11 Python
Django nginx配置实现过程详解
2020/09/10 Python
暇步士官网:Hush Puppies
2016/09/22 全球购物
《数星星的孩子》教学反思
2014/04/11 职场文书
财务部绩效考核方案
2014/05/04 职场文书
企业安全生产标语
2014/06/06 职场文书
党的群众路线教育实践活动剖析材料
2014/09/30 职场文书
党员干部学习三严三实心得体会
2016/01/05 职场文书