python: gevent轻松实现并行下载多个文件
来源:互联网 发布:西门子insight软件 编辑:程序博客网 时间:2024/05/22 02:11
参考网站:http://itindex.net/detail/9240-python-gevent-%E5%B9%B6%E8%A1%8C
#!/bin/python
# file: download.py
import gevent
from gevent import socket
from gevent import monkey; monkey.patch_all()
import sys
import urllib2
def download(url):
try:
url_opener = urllib2.urlopen(url)
except:
print 'open url error'
return
if url_opener.code!=200:
print 'return code is:%d'%(url_opener.code)
return
if not url_opener.headers.has_key('Content-Length'):
print 'no content length'
return
content_length = long(url_opener.headers['Content-Length'])
download_size = 0
file_name = url[url.rfind('/')+1:]
target_file = open(file_name, 'wb')
while download_size<content_length:
try:
str_content = url_opener.read(1024)
except Exception,e:
print 'read error:%s' % (str(e))
return
if not str_content or len(str_content)==0:
print 'read error, connection close'
return
target_file.write(str_content)
download_size += len(str_content)
print '[%s]:download size:%d, progress:%d' % (
file_name,
download_size,
int(float(download_size)/float(content_length)*100.0))
print '[%s]:download complete!' % (file_name)
if __name__=='__main__':
argc = len(sys.argv)
if argc<2:
print 'usage:%s <url> [url...]' % (sys.argv[0])
sys.exit(-1)
jobs = [gevent.spawn(download,url) for url in sys.argv[1:]]
gevent.joinall(jobs, timeout=600)
'''
感谢Thijs同学的推荐!利用协程,在一个函数中从头写到尾就能实现并行,实在是太爽了。
相比之下,twisted中眼花缭乱的回调,学习曲线实在是太陡峭了!
'''
- python: gevent轻松实现并行下载多个文件
- 多客户端实现文件从服务器端下载文件--并行下载
- smartupload组件轻松实现多文件上传,单文件下载,多文件下载。
- C/C++轻松实现文件下载
- gunicorn+gevent实现 flask web 应用的并行访问
- java实现多个文件打包下载
- python gevent
- python-gevent
- python gevent
- python gevent
- python 多进程实现文件下载传输
- 飘逸的python - 写个端口扫描器及各种并发尝试(多线程/多进程/gevent/futures)
- 并行批处理多个文件 matlab
- FileUpload框架实现文件上传(多个文件)和下载
- Android 文件下载(断点、多任务并行下载)
- WebClient 轻松实现文件下载上传、网页抓取
- python实现断点续传下载文件
- python 实现ftp文件下载
- 输入x,输出y。
- Apache下使用Alias创建虚拟目录的问题
- PHP 使用 Imagick 裁切/生成缩略图/添加水印, 自动检测和处理 GIF
- 输入成绩,输出等级。
- java script放在head和body的区别
- python: gevent轻松实现并行下载多个文件
- Gevent 任务的持续追加和执行
- 求和,Sn=a+aa+aaa..
- 万内回文数
- poj 1011
- poj2464 线段树扫描线
- 谁是回文数
- 通信工程用这些书应该够了
- 千内回文数