对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 文件和路径操作函数小结
Nov 23 Python
python实现端口转发器的方法
Mar 13 Python
把项目从Python2.x移植到Python3.x的经验总结
Apr 20 Python
使用python对文件中的数值进行累加的实例
Nov 28 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
Jul 23 Python
numpy np.newaxis 的实用分享
Nov 30 Python
python飞机大战 pygame游戏创建快速入门详解
Dec 17 Python
pytorch中nn.Conv1d的用法详解
Dec 31 Python
Python 使用生成器代替线程的方法
Aug 04 Python
Python创建自己的加密货币的示例
Mar 01 Python
Python 中的 copy()和deepcopy()
Nov 07 Python
python的列表生成式,生成器和generator对象你了解吗
Mar 16 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生成的html meta和link标记在body标签里 顶部有个空行
2010/05/18 PHP
php 如何获取数组第一个值
2013/08/06 PHP
PHP 通过Socket收发十六进制数据的实现代码
2013/08/16 PHP
常见php数据文件缓存类汇总
2014/12/05 PHP
php遍历目录下文件并按修改时间排序操作示例
2019/07/12 PHP
PHP Redis扩展无法加载的问题解决方法
2019/08/22 PHP
javascript 简单抽屉效果的实现代码
2010/03/09 Javascript
一个javascript图片阅览组件
2010/11/09 Javascript
Node.js开发指南中的简单实例(mysql版)
2013/09/17 Javascript
基于jQuery实现的文字按钮表单特效整理
2014/12/07 Javascript
js实现仿Discuz文本框弹出层效果
2015/08/13 Javascript
基于jquery实现人物头像跟随鼠标转动
2015/08/23 Javascript
Boostrap实现的登录界面实例代码
2016/10/09 Javascript
js实现对table的增加行和删除行的操作方法
2016/10/13 Javascript
vue.js 上传图片实例代码
2017/06/22 Javascript
详解Node.js模板引擎Jade入门
2018/01/19 Javascript
vue实现选项卡及选项卡切换效果
2018/04/24 Javascript
vue解决跨域问题(推荐)
2020/11/10 Javascript
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
介绍Python中的一些高级编程技巧
2015/04/02 Python
python数据处理实战(必看篇)
2017/06/11 Python
详解Python3之数据指纹MD5校验与对比
2019/06/11 Python
Python实现TCP探测目标服务路由轨迹的原理与方法详解
2019/09/04 Python
基于Python获取docx/doc文件内容代码解析
2020/02/17 Python
Anaconda配置pytorch-gpu虚拟环境的图文教程
2020/04/16 Python
python读取图片颜色值并生成excel像素画的方法实例
2021/02/19 Python
python自动生成sql语句的脚本
2021/02/24 Python
【HTML5】3D模型--百行代码实现旋转立体魔方实例
2016/12/16 HTML / CSS
荷兰网上药店:Drogisterij.net
2019/09/03 全球购物
乌克兰排名第一的在线旅游超市:Farvater.Travel
2020/01/02 全球购物
MVC的各个部分都有那些技术来实现?如何实现?
2016/04/21 面试题
大学生工作求职信
2014/06/23 职场文书
应届生自荐书
2014/06/23 职场文书
入党积极分子学习党的纲领思想汇报
2014/09/13 职场文书
公务员四风问题对照检查材料整改措施
2014/09/26 职场文书
跑吧孩子观后感
2015/06/10 职场文书