Re: [問題] 關於邊讀邊寫 or MemoryStream(.net)

看板Python作者 (ㄎ一歐)時間17年前 (2008/05/18 14:15), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/5 (看更多)
真的很感激你 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
文章代碼(AID): #18BycPtp (Python)
討論串 (同標題文章)
文章代碼(AID): #18BycPtp (Python)