一、背景
最近老愛提及背景這兩個字肩刃,似乎沒有背景就做不了事情祟霍。所以,工作上所有的事情都是有一個出發(fā)點盈包,然后N多人會質(zhì)疑你這個出發(fā)點對不對沸呐,出發(fā)點對了,也繼續(xù)質(zhì)疑你做的方法對不對…
言歸正傳续语,這段代碼的背景是這樣的:有一個很長的文本垂谢,里面均是圖片的url,想將每個圖片的大小從http header上抓出來疮茄,寫入到另外一個文件滥朱。簡單來說就想得到3W多張圖片各張圖片的大小,然后再統(tǒng)計平均值力试。
使用單線程下載徙邻,由于http訪問的時候使用的是TCP三次握手,異常慢畸裳,可以利用多線程進行下載缰犁,親測速度快了接近5倍。
二怖糊、代碼
#!/usr/bin/python
import os,sys,time,urllib2
import threading
def get(url):
#使用urllib2的庫對url進行訪問
r=urllib2.urlopen(url)
#讀取url的頁面
content=r.read()
#從header獲得content-length
a=dict(r.headers).get('content-length', 0)
output = open('/home/abc/httprequest_new/output.txt', 'a+')
output.write(a+'\n')
#print a
#file(fname,'w').write(content)
def main():
urllist=open("/home/abc/httprequest.txt", "r")
for i in urllist:
url=i
#name=url.replace('/','_')
#print url,name
while threading.activeCount()>300:
time.sleep(0.1)
t=threading.Thread(target=get,args=([url,]))
t.start()
if __name__=='__main__':
main()
總結(jié)
使用Python的多線程不是很麻煩的事情帅容,步驟:
- import threading
- t=threading.Thread(target=get,args=([url,]))
- t.start()
作為Python初入門者,可以考慮多用這類的方法伍伤。