Heim  >  Artikel  >  Backend-Entwicklung  >  Probleme mit der Python-Multithread-Aufgabenverteilung

Probleme mit der Python-Multithread-Aufgabenverteilung

WBOY
WBOYOriginal
2016-12-01 00:56:561201Durchsuche

Ich möchte jetzt den Inhalt einer Website mit mehreren Threads crawlen. Angenommen, der Website-Inhalt hat 105 Seiten, aber aufgrund von Maschinenbeschränkungen können nur zehn Threads für das Crawlen aktiviert werden Seiten 1-10?, der zweite Thread deckt die Seiten 11-20 ab und so weiter, bis der zehnte Thread für die Seiten 91-105 verantwortlich ist. Wie sollte diese Idee in Python-Code geschrieben werden?

Antwortinhalt:

Ich möchte jetzt den Inhalt einer Website mit mehreren Threads crawlen, aber aufgrund von Maschinenbeschränkungen können nur zehn Threads für das Crawlen aktiviert werden Seiten 1-10?, der zweite Thread deckt die Seiten 11-20 ab und so weiter, bis der zehnte Thread für die Seiten 91-105 verantwortlich ist. Wie sollte diese Idee in Python-Code geschrieben werden?

python3

<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>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn