python多线程任务分发的问题

原创
2023-03-02 07:50:02 909浏览

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

回复内容:

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

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()
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。