2016-08-30 70 views
0

我有一個簡單的web crawler,它每秒抓取~4(特定)網站。如果我在兩個不同的Python IDE中運行腳本,我可以將速度提高一倍,因爲這兩個程序每秒運行約4次抓取的代碼。 爲什麼我的代碼運行速度比它慢?或者它更快,因爲我使用一種愚蠢的方式來使我的腳本同時使用兩個不同的IDE來使用多線程/多處理?Python多線程網絡抓取

我使用Python 3.5.2。

+2

你的方法並不像你想象的那麼愚蠢,因爲在Python 3之前,這是做多處理的官方方法:) –

+1

爲了澄清,你想知道爲什麼程序本身以相同的速度運行,無論它是唯一的一個在跑,或者如果有兩個在旅途中,所以通過兩個在旅途中總體結果是兩倍 - 正確? –

+0

@ TadhgMcDonald-Jensen - 正確 – SturmGhost

回答

0

這是所有關於線程,如註釋說明。

現在有你的程序的解決方案:

import requests 
import threading 

class Crawler: 
    def __init__(self, url): 
     self.url = url 
     self.session = requests.Session() 

    def crawl(self): 
     page = self.session.get(url) 
     # Do your crawling here 

with open('urls.txt', 'r') as f: # Assuming you use a file with a list of URLs 
    for url in f: 
     while(threading.active_count() > 20): # Use 20 threads 
      time.sleep(0.1) 
     c = Crawler(url) 
     t = threading.Thread(target = c.crawl()) 

請注意,threading.active_count()也算主線程。

而且,您應該在HTTP請求中使用超時。