登陆

python多线程任务分发的问题

我现在要多线程抓取一个网站内容,假设这个网站内容有105页,但是由于机器限制只能开启十个线程抓取,那么我如何做到第一个线程负责抓1-10页,第二个线程11-20页以此类推,直到最后第十个线程负责抓取91-105页,这个思路该怎么写成python代码啊?

# PHP
小葫芦小葫芦1811 天前339 次浏览

全部回复(1)我要回复

  • 三叔

    三叔2016-11-09 14:09:12

    python3

    import urllib
    import queue
    import threading
    
    def 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()


    回复
    0
  • 取消回复发送