Re: [問題] 關於邊讀邊寫 or MemoryStream(.net)
真的很感激你 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
討論串 (同標題文章)
Python 近期熱門文章
PTT數位生活區 即時熱門文章