作者qqttpp (ㄎ一欧)
看板Python
标题Re: [问题] 关於边读边写 or MemoryStream(.net)
时间Sun May 18 14:15:52 2008
真的很感激你 yungyuc
而且用起来效率也蛮高的
可是後来想想我好像没有把我的问题说的很清楚
但是得到的效果还是令人满意
yungyuc大大的方法简单的说是
==================================
先下载1024*1024後停止下载
存入硬碟
再下载後来的1024*1024
.....
===================================
但是其实我真正想要做的是
有一个中间的buffer可以使下载跟存入硬碟同时进行(要写入硬碟要等资料量达一定)
所以流程变成是
先起头下载
立刻启动写入硬碟机制
(已经下载的资料正在写入硬碟,未下载资料正从网路下载回来)
未下载资料网路下载完成
已下载的资料写入完成
另外我也查了很多的资料 从这篇好像就是描述怎样使用python达成这功能
众里寻她,蓦然回首——Python的流机制:
http://0rz.tw/8044I
後来模仿大大的方法做了一个类似的东西
===================================
uf = urllib.urlopen(url)
f = open(fn, 'wb')
def buff(uf):
try:
data=""
lines=0
for line in uf:
data += line
lines=lines+1
if lines==1000:
lines=0
break
yield data
except StopIteration, e:
f.close()
return
while True:
try:
f.write(buff(uf).next())
except:
f.close()
=========================================
可是事後证明这样超级销耗cpu资源
另外一个传输可达1.7Mb/s的下载(flashget or yungyuc大的程式)
用上面那个只能达到300ks/s
不过他的架构似乎真的是一个buffer??
还真是有趣的问题~
※ 引述《yungyuc (酷狗喵千代)》之铭言:
: bufsize = 1024*1024
: uf = urllib.urlopen(url)
: f = open(fn, 'wb')
: sys.stdout.flush()
: while True:
: data = uf.read(bufsize)
: sys.stdout.write('.')
: sys.stdout.flush()
: f.write(data)
: if len(data) < bufsize: break
: uf.close()
: f.close()
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 211.76.250.17