最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2016年10月08日 14:34:24   投稿:lqh  
這篇文章主要介紹了Python 爬蟲多線程詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下

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

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

# -*-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

if __name__ == '__main__':
 # 構(gòu)造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))

 # 一般方式
 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)

# 多線程
 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個訪問速度比較慢的網(wǎng)頁,一般方式耗時50s,多線程耗時10s。
多線程代碼解讀:

# 創(chuàng)建線程類,繼承Thread類
class MyThread(threading.Thread):
 def __init__(self, func, args):
  threading.Thread.__init__(self) # 調(diào)用父類的構(gòu)造函數(shù)
  self.args = args
  self.func = func

 def run(self): # 線程活動方法
  apply(self.func, self.args)




threadList = [MyThread(open_url, (url,)) for url in urlList] # 調(diào)用線程類創(chuàng)建新線程,返回線程列表
 for t in threadList:
  t.setDaemon(True) # 設置守護線程,父線程會等待子線程執(zhí)行完后再退出
  t.start() # 線程開啟
 for i in threadList:
  i.join() # 等待線程終止,等子線程執(zhí)行完后再執(zhí)行父線程

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

相關(guān)文章

  • wxPython+Matplotlib繪制折線圖表

    wxPython+Matplotlib繪制折線圖表

    這篇文章主要介紹了wxPython+Matplotlib繪制折線圖表,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • python pygame模塊編寫飛機大戰(zhàn)

    python pygame模塊編寫飛機大戰(zhàn)

    這篇文章主要為大家詳細介紹了python pygame模塊編寫飛機大戰(zhàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Python中格式化字符串的方法總結(jié)

    Python中格式化字符串的方法總結(jié)

    字符串格式化是一項常見且重要的操作,用于動態(tài)生成包含變量內(nèi)容的字符串,本文為大家整理一些常用的格式化字符串方法,希望對大家有所幫助
    2024-10-10
  • Python調(diào)用AnythingLLM API使用流輸出的實現(xiàn)

    Python調(diào)用AnythingLLM API使用流輸出的實現(xiàn)

    本文主要介紹了Python調(diào)用AnythingLLM API使用流輸出的實現(xiàn),用于處理長文本或?qū)崟r交互場景,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2025-03-03
  • Python序列排序的具體場景實現(xiàn)

    Python序列排序的具體場景實現(xiàn)

    本文主要介紹了Python序列排序的具體場景實現(xiàn),主要介紹了內(nèi)置的sort()方法或者全局的sorted()方法著兩種方法,具有一定的參考價值,感興趣的可以了解一下
    2025-01-01
  • Python3調(diào)用微信企業(yè)號API發(fā)送文本消息代碼示例

    Python3調(diào)用微信企業(yè)號API發(fā)送文本消息代碼示例

    這篇文章主要介紹了Python3調(diào)用微信企業(yè)號API發(fā)送文本消息代碼示例,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • 使用Template格式化Python字符串的方法

    使用Template格式化Python字符串的方法

    今天小編就為大家分享一篇使用Template格式化Python字符串的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • python解析含有重復key的json方法

    python解析含有重復key的json方法

    今天小編就為大家分享一篇python解析含有重復key的json方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • PyCharm搭建Spark開發(fā)環(huán)境的實現(xiàn)步驟

    PyCharm搭建Spark開發(fā)環(huán)境的實現(xiàn)步驟

    這篇文章主要介紹了PyCharm搭建Spark開發(fā)環(huán)境的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • Anaconda使用IDLE的實現(xiàn)示例

    Anaconda使用IDLE的實現(xiàn)示例

    這篇文章主要介紹了Anaconda使用IDLE的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09

最新評論

双辽市| 韶山市| 安达市| 赤壁市| 隆安县| 上饶市| 微山县| 昭苏县| 南江县| 阿克陶县| 麻阳| 镇康县| 多伦县| 葫芦岛市| 西充县| 若尔盖县| 车致| 吴江市| 桦川县| 永安市| 缙云县| 商水县| 漳平市| 东乌珠穆沁旗| 怀仁县| 陵水| 四川省| 花垣县| 同江市| 凌云县| 图们市| 满洲里市| 双桥区| 仪征市| 仁寿县| 于田县| 南乐县| 资中县| 天祝| 翁牛特旗| 通城县|