我有一個簡單的web crawler,它每秒抓取~4(特定)網站。如果我在兩個不同的Python IDE中運行腳本,我可以將速度提高一倍,因爲這兩個程序每秒運行約4次抓取的代碼。 爲什麼我的代碼運行速度比它慢?或者它更快,因爲我使用一種愚蠢的方式來使我的腳本同時使用兩個不同的IDE來使用多線程/多處理?Python多線程網絡抓取
我使用Python 3.5.2。
我有一個簡單的web crawler,它每秒抓取~4(特定)網站。如果我在兩個不同的Python IDE中運行腳本,我可以將速度提高一倍,因爲這兩個程序每秒運行約4次抓取的代碼。 爲什麼我的代碼運行速度比它慢?或者它更快,因爲我使用一種愚蠢的方式來使我的腳本同時使用兩個不同的IDE來使用多線程/多處理?Python多線程網絡抓取
我使用Python 3.5.2。
這聽起來像是一個工作線程池的偉大任務。
這是所有關於線程,如註釋說明。
現在有你的程序的解決方案:
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請求中使用超時。
你的方法並不像你想象的那麼愚蠢,因爲在Python 3之前,這是做多處理的官方方法:) –
爲了澄清,你想知道爲什麼程序本身以相同的速度運行,無論它是唯一的一個在跑,或者如果有兩個在旅途中,所以通過兩個在旅途中總體結果是兩倍 - 正確? –
@ TadhgMcDonald-Jensen - 正確 – SturmGhost