python 并发下载器实现方法示例


Posted in Python onNovember 22, 2019

本文实例讲述了python 并发下载器实现方法。分享给大家供大家参考,具体如下:

并发下载器

并发下载原理

from gevent import monkey
import gevent
import urllib.request
# 有耗时操作时需要
monkey.patch_all()
def my_downLoad(url):
  print('GET: %s' % url)
  resp = urllib.request.urlopen(url)
  data = resp.read()
  print('%d bytes received from %s.' % (len(data), url))
gevent.joinall([
    gevent.spawn(my_downLoad, 'http://www.baidu.com/'),
    gevent.spawn(my_downLoad, 'http://www.itcast.cn/'),
    gevent.spawn(my_downLoad, 'http://www.itheima.com/'),
])

运行结果

GET: http://www.baidu.com/
GET: http://www.itcast.cn/
GET: http://www.itheima.com/
111327 bytes received from http://www.baidu.com/.
172054 bytes received from http://www.itheima.com/.
215035 bytes received from http://www.itcast.cn/.

从上能够看到是先发送的获取baidu的相关信息,然后依次是itcast、itheima,但是收到数据的先后顺序不一定与发送顺序相同,这也就体现出了异步,即不确定什么时候会收到数据,顺序不一定

实现多个视频下载

from gevent import monkey
import gevent
import urllib.request
#有IO才做时需要这一句
monkey.patch_all()
def my_downLoad(file_name, url):
  print('GET: %s' % url)
  resp = urllib.request.urlopen(url)
  data = resp.read()
  with open(file_name, "wb") as f:
    f.write(data)
  print('%d bytes received from %s.' % (len(data), url))
gevent.joinall([
    gevent.spawn(my_downLoad, "1.mp4", 'http://oo52bgdsl.bkt.clouddn.com/05day-08-%E3%80%90%E7%90%86%E8%A7%A3%E3%80%91%E5%87%BD%E6%95%B0%E4%BD%BF%E7%94%A8%E6%80%BB%E7%BB%93%EF%BC%88%E4%B8%80%EF%BC%89.mp4'),
    gevent.spawn(my_downLoad, "2.mp4", 'http://oo52bgdsl.bkt.clouddn.com/05day-03-%E3%80%90%E6%8E%8C%E6%8F%A1%E3%80%91%E6%97%A0%E5%8F%82%E6%95%B0%E6%97%A0%E8%BF%94%E5%9B%9E%E5%80%BC%E5%87%BD%E6%95%B0%E7%9A%84%E5%AE%9A%E4%B9%89%E3%80%81%E8%B0%83%E7%94%A8%28%E4%B8%8B%29.mp4'),
])

上面的url可以换为自己需要下载视频、音乐、图片等网址

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python 中文乱码问题深入分析
Mar 13 Python
Python的Django框架使用入门指引
Apr 15 Python
Python计算已经过去多少个周末的方法
Jul 25 Python
Python 爬虫学习笔记之多线程爬虫
Sep 21 Python
详解Python文本操作相关模块
Jun 22 Python
Python3中类、模块、错误与异常、文件的简易教程
Nov 20 Python
pip 安装库比较慢的解决方法(国内镜像)
Oct 06 Python
pytorch中nn.Conv1d的用法详解
Dec 31 Python
python dumps和loads区别详解
Feb 04 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
Jun 23 Python
Python tempfile模块生成临时文件和临时目录
Sep 30 Python
numba提升python运行速度的实例方法
Jan 25 Python
使用python绘制二维图形示例
Nov 22 #Python
python将邻接矩阵输出成图的实现
Nov 21 #Python
python实现小世界网络生成
Nov 21 #Python
使用Python的networkx绘制精美网络图教程
Nov 21 #Python
利用Python绘制Jazz网络图的例子
Nov 21 #Python
Python TCP通信客户端服务端代码实例
Nov 21 #Python
python绘制随机网络图形示例
Nov 21 #Python
You might like
php中用文本文件做数据库的实现方法
2008/03/27 PHP
php递归实现无限分类生成下拉列表的函数
2010/08/08 PHP
PHP如何将图片文件上传到另外一台服务器上
2019/08/26 PHP
初探jquery——表单应用范例
2007/02/20 Javascript
JavaScript 图片预览效果 推荐
2009/12/22 Javascript
jqeury eval将字符串转换json的方法
2011/01/20 Javascript
jQuery给动态添加的元素绑定事件的方法
2015/03/09 Javascript
js实现PC端根据IP定位当前城市地理位置
2017/02/22 Javascript
详解vue父子模版嵌套案例
2017/03/04 Javascript
详解微信小程序设置底部导航栏目方法
2017/06/29 Javascript
node+express+ejs使用模版引擎做的一个示例demo
2017/09/18 Javascript
基于cropper.js封装vue实现在线图片裁剪组件功能
2018/03/01 Javascript
vue :src 文件路径错误问题的解决方法
2018/05/15 Javascript
jQuery实现数字自动增加或者减少的动画效果示例
2018/12/11 jQuery
详解在React-Native中持久化redux数据
2019/05/22 Javascript
基于js判断浏览器是否支持webGL
2020/04/18 Javascript
[48:27]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
python实现的二叉树定义与遍历算法实例
2017/06/30 Python
python中logging库的使用总结
2017/10/18 Python
python的Crypto模块实现AES加密实例代码
2018/01/22 Python
Python中Proxypool库的安装与配置
2018/10/19 Python
python对视频画框标记后保存的方法
2018/12/07 Python
Python中py文件转换成exe可执行文件的方法
2019/06/14 Python
python实现生成Word、docx文件的方法分析
2019/08/30 Python
Python如何获取文件指定行的内容
2020/05/27 Python
python能开发游戏吗
2020/06/11 Python
python数据类型强制转换实例详解
2020/06/22 Python
python中selenium库的基本使用详解
2020/07/31 Python
css3实现多个元素依次显示效果
2017/12/12 HTML / CSS
工业设计专业个人求职信范文
2013/12/28 职场文书
我的中国梦口号
2014/06/16 职场文书
2014年文员工作总结
2014/11/18 职场文书
一年级小学生评语大全
2014/12/25 职场文书
《比尾巴》教学反思
2016/02/24 职场文书
2019银行员工个人工作自我鉴定
2019/06/27 职场文书
什么是执行力?9个故事告诉您:成功绝非偶然!
2019/07/05 职场文书