一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python 爬蟲多線程詳解及實例代碼

Python 爬蟲多線程詳解及實例代碼

2020-09-09 09:58Python教程網 Python

這篇文章主要介紹了Python 爬蟲多線程詳解及實例代碼的相關資料,需要的朋友可以參考下

python是支持多線程的,主要是通過thread和threading這兩個模塊來實現的。thread模塊是比較底層的模塊,threading模塊是對thread做了一些包裝的,可以更加方便的使用。

雖然python的多線程受GIL限制,并不是真正的多線程,但是對于I/O密集型計算還是能明顯提高效率,比如說爬蟲
下面用一個實例來驗證多線程的效率。代碼只涉及頁面獲取,并沒有解析出來。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# -*-coding:utf-8 -*-
import urllib2, time
import threading
 
class MyThread(threading.Thread):
 def __init__(self, func, args):
  threading.Thread.__init__(self)
  self.args = args
  self.func = func
 
 def run(self):
  apply(self.func, self.args)
 
def open_url(url):
 request = urllib2.Request(url)
 html = urllib2.urlopen(request).read()
 print len(html)
 return html
?
1
2
3
4
5
if __name__ == '__main__':
 # 構造url列表
 urlList = []
 for p in range(1, 10):
  urlList.append('http://s.wanfangdata.com.cn/Paper.aspx?q=%E5%8C%BB%E5%AD%A6&p=' + str(p))
?
1
2
3
4
5
6
# 一般方式
n_start = time.time()
for each in urlList:
 open_url(each)
n_end = time.time()
print 'the normal way take %s s' % (n_end-n_start)
?
1
2
3
4
5
6
7
8
9
10
# 多線程
 t_start = time.time()
 threadList = [MyThread(open_url, (url,)) for url in urlList]
 for t in threadList:
  t.setDaemon(True)
  t.start()
 for i in threadList:
  i.join()
 t_end = time.time()
 print 'the thread way take %s s' % (t_end-t_start)

分別用兩種方式獲取10個訪問速度比較慢的網頁,一般方式耗時50s,多線程耗時10s。
多線程代碼解讀:

?
1
2
3
4
5
6
7
8
9
# 創建線程類,繼承Thread類
class MyThread(threading.Thread):
 def __init__(self, func, args):
  threading.Thread.__init__(self) # 調用父類的構造函數
  self.args = args
  self.func = func
 
 def run(self): # 線程活動方法
  apply(self.func, self.args)
?
1
2
3
4
5
6
threadList = [MyThread(open_url, (url,)) for url in urlList] # 調用線程類創建新線程,返回線程列表
 for t in threadList:
  t.setDaemon(True) # 設置守護線程,父線程會等待子線程執行完后再退出
  t.start() # 線程開啟
 for i in threadList:
  i.join() # 等待線程終止,等子線程執行完后再執行父線程

以上就是本文的全部內容,希望對大家的學習有所幫助。

原文鏈接:http://www.server110.com/python/201603/11541.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 强波多野结衣女教师 | 息与子中文字幕在线 | 性色AV一区二区三区V视界影院 | 99热在线获取最新地址 | 久久99热在线观看7 久久99精品涩AV毛片观看 | 免费全看男女拍拍拍的视频 | 好大好硬抽搐好爽想要 | 国产亚洲福利精品一区二区 | 高清男的插曲女的 欢迎你老狼 | 四虎精品免费国产成人 | 国产精品夜夜爽张柏芝 | 星星动漫在线观看免费 | 国产免费看黄的私人影院 | 日韩成a人片在线观看日本 日韩不卡一区二区 | 手机看片日韩1024你懂的首页 | 四虎视屏| 亚洲天堂男人网 | 91tm视频 | 欧美影院一区二区 | 青青五月天 | 国产亚洲精品看片在线观看 | 亚洲第一色视频 | 国产第9页 | 日本高清免费不卡在线播放 | 国产成人精选免费视频 | 国产免费资源 | 日本精品一卡二卡≡卡四卡 | 996热精品视频在线观看 | 免费观看视频网站 | 国产成人精品曰本亚洲77美色 | 无套白浆 | 精品一卡2卡3卡4卡5卡亚洲 | 日本中文字幕永久在线 | 99久久999久久久综合精品涩 | 鬼畜重口高h合集长短篇 | 久久一本岛在免费线观看2020 | 99久久999久久久综合精品涩 | 欧美又大又粗又爽视频 | 国产伦精品一区二区三区免费观看 | 国产在线观看网站 | 免费精品国产 |