>  기사  >  백엔드 개발  >  Python 다중 스레드 작업 분배 문제

Python 다중 스레드 작업 분배 문제

WBOY
WBOY원래의
2016-12-01 00:56:561165검색

이제 여러 스레드가 있는 웹 사이트 콘텐츠를 크롤링하려고 합니다. 웹 사이트 콘텐츠에 105개의 페이지가 있지만 시스템 제한으로 인해 크롤링을 위해 10개의 스레드만 활성화할 수 있다고 가정합니다. 그러면 첫 번째 스레드가 크롤링을 담당하도록 하려면 어떻게 해야 할까요? 1-10페이지? , 두 번째 스레드는 11-20페이지를 다루고, 10번째 스레드는 91-105페이지를 담당할 때까지 이 아이디어를 Python 코드로 어떻게 작성해야 합니까?

답글 내용:

이제 여러 스레드가 있는 웹 사이트 콘텐츠를 크롤링하려고 합니다. 웹 사이트 콘텐츠에 105개의 페이지가 있지만 시스템 제한으로 인해 크롤링을 위해 10개의 스레드만 활성화할 수 있다고 가정합니다. 그러면 첫 번째 스레드가 크롤링을 담당하도록 하려면 어떻게 해야 할까요? 1-10페이지? , 두 번째 스레드는 11-20페이지를 다루고, 10번째 스레드는 91-105페이지를 담당할 때까지 이 아이디어를 Python 코드로 어떻게 작성해야 합니까?

파이썬3

<code class="python">
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()
</code>
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.