欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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__':
 # 構造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)用父類的構造函數(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)容,希望對大家的學習有所幫助。

相關文章

  • Django 限制訪問頻率的思路詳解

    Django 限制訪問頻率的思路詳解

    這篇文章主要介紹了Django 限制訪問頻率的思路詳解,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • 使用python如何將數(shù)據(jù)集劃分為訓練集、驗證集和測試集

    使用python如何將數(shù)據(jù)集劃分為訓練集、驗證集和測試集

    這篇文章主要介紹了使用python如何將數(shù)據(jù)集劃分為訓練集、驗證集和測試集問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • argparse?模塊簡介

    argparse?模塊簡介

    argparse是一個用來解析命令行參數(shù)的 Python 庫,它是 Python 標準庫的一部分,基于 python 2.7 的stdlib 代碼,這篇文章主要介紹了argparse?模塊詳解,需要的朋友可以參考下
    2023-02-02
  • Python利用OpenCV和skimage實現(xiàn)圖像邊緣檢測

    Python利用OpenCV和skimage實現(xiàn)圖像邊緣檢測

    提取圖片的邊緣信息是底層數(shù)字圖像處理的基本任務之一。本文將通過OpenCV和skimage的?Canny?算法實現(xiàn)圖像邊緣檢測,感興趣的可以了解一下
    2022-12-12
  • Python實現(xiàn)購物車購物小程序

    Python實現(xiàn)購物車購物小程序

    這篇文章主要為大家詳細介紹了Python實現(xiàn)購物車購物小程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Python中inplace、subset參數(shù)的意義及說明

    Python中inplace、subset參數(shù)的意義及說明

    這篇文章主要介紹了Python中inplace、subset參數(shù)的意義及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • python3爬蟲中引用Queue的實例講解

    python3爬蟲中引用Queue的實例講解

    在本篇內(nèi)容里小編給大家整理的是一篇關于python3爬蟲中引用Queue的實例講解內(nèi)容,有興趣的朋友們可以學習下。
    2020-11-11
  • Django跨域請求CSRF的方法示例

    Django跨域請求CSRF的方法示例

    這篇文章主要介紹了Django跨域請求CSRF的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • python 批量將PPT導出成圖片集的案例

    python 批量將PPT導出成圖片集的案例

    這篇文章主要介紹了python 批量將PPT導出成圖片集的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • python實現(xiàn)文件+參數(shù)發(fā)送request的實例代碼

    python實現(xiàn)文件+參數(shù)發(fā)送request的實例代碼

    這篇文章主要介紹了python實現(xiàn)文件+參數(shù)發(fā)送request的實例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01

最新評論