python多線程任務分發的問題

來源:互聯網
上載者:User
我現在要多線程抓取一個網站內容,假設這個網站內容有105頁,但是由於機器限制只能開啟十個線程抓取,那麼我如何做到第一個線程負責抓1-10頁,第二個線程11-20頁以此類推,直到最後第十個線程負責抓取91-105頁,這個思路該怎麼寫成python代碼啊?

回複內容:

我現在要多線程抓取一個網站內容,假設這個網站內容有105頁,但是由於機器限制只能開啟十個線程抓取,那麼我如何做到第一個線程負責抓1-10頁,第二個線程11-20頁以此類推,直到最後第十個線程負責抓取91-105頁,這個思路該怎麼寫成python代碼啊?

python3

import urllibimport queueimport threadingdef download(queue,lck):    """    工作者,當隊列中沒有任務的時候就執行退出。    """    while not queue.empty():        pg = queue.get()                #在此寫 抓取網頁的代碼        #然後把抓到的內容寫入檔案                lck.acquire()        print ('第 %d 頁已完成'%pg)         lck.release()        queue.task_done()def main():    """    主線程,     """    print ('開始下載……')    lck = threading.Lock()    q = queue.Queue()    for pg in range(1,106): #網站內容有105頁        q.put(pg)            for i in range(10):#十個線程        t = threading.Thread(target=download, args=(q,lck))        t.start()    q.join()       # 等待所以任務完成    print ('結束')if __name__ == '__main__':    main()
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.