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编写的com组件发生R6034错误的原因与解决办法
Apr 01 Python
使用Protocol Buffers的C语言拓展提速Python程序的示例
Apr 16 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
Apr 18 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
Jun 13 Python
pandas.DataFrame的pivot()和unstack()实现行转列
Jul 06 Python
wxpython绘制圆角窗体
Nov 18 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
Jan 08 Python
Python 之 Json序列化嵌套类方式
Feb 27 Python
python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例
Mar 09 Python
如何使用Python调整图像大小
Sep 26 Python
Python paramiko使用方法代码汇总
Nov 20 Python
Python调用高德API实现批量地址转经纬度并写入表格的功能
Jan 12 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环境配置 php5 MySQL5 apache2 phpmyadmin安装与配置图文教程
2007/03/16 PHP
关于session在PHP5的配置文件中的详细设置参数说明
2011/04/20 PHP
php使用filter过滤器验证邮箱 ipv6地址 url验证
2013/12/25 PHP
php中引用&的用法分析【变量引用,函数引用,对象引用】
2016/12/12 PHP
PHP数据库操作四:mongodb用法分析
2017/08/16 PHP
PHP中危险的file_put_contents函数详解
2017/11/04 PHP
php的单例模式及应用场景详解
2021/02/27 PHP
JQERY limittext 插件0.2版(长内容限制显示)
2010/08/27 Javascript
javascipt基础内容--需要注意的细节
2013/04/10 Javascript
jquery交替变换颜色的三种方法 实例代码
2013/11/19 Javascript
JS中三目运算符和if else的区别分析与示例
2014/11/21 Javascript
JS模拟键盘打字效果的方法
2015/08/05 Javascript
基于javascript实现的购物商城商品倒计时实例
2016/12/11 Javascript
Javascript设计模式之装饰者模式详解篇
2017/01/17 Javascript
使用vue如何构建一个自动建站项目
2018/02/05 Javascript
小程序自定义日历效果
2018/12/29 Javascript
使用Vue中 v-for循环列表控制按钮隐藏显示功能
2019/04/23 Javascript
vue+element_ui上传文件,并传递额外参数操作
2020/12/05 Vue.js
Vue单页面应用中实现Markdown渲染
2021/02/14 Vue.js
python中字符串比较使用is、==和cmp()总结
2018/03/18 Python
对python csv模块配置分隔符和引用符详解
2018/12/12 Python
对python 合并 累加两个dict的实例详解
2019/01/21 Python
python导入坐标点的具体操作
2019/05/10 Python
如何基于Python实现电子邮件的发送
2019/12/16 Python
python实现在线翻译功能
2020/03/03 Python
python自动打开浏览器下载zip并提取内容写入excel
2021/01/04 Python
整理HTML5中表单的常用属性及新属性
2016/02/19 HTML / CSS
匡威西班牙官网:Converse西班牙
2019/10/01 全球购物
毕业研究生的自我鉴定
2013/11/30 职场文书
上班早退检讨书
2014/01/09 职场文书
乡镇办公室工作决心书
2014/03/11 职场文书
敬老院标语
2014/06/27 职场文书
群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
总经理助理岗位职责
2015/01/31 职场文书
幼儿教师辞职信
2015/02/27 职场文书
Python 如何将integer转化为罗马数(3999以内)
2021/06/05 Python