1、并發(fā)請求的相關(guān)參數(shù)
1.1、設(shè)置并發(fā)請求的最大數(shù)量
CONCURRENT_REQUESTS
CONCURRENT_REQUESTS = 16 # 全局并發(fā)請求,下載器將執(zhí)行的并發(fā)(即同時)請求的最大數(shù)量
# CONCURRENT_REQUESTS_PER_IP = 16 # 指任何單個IP執(zhí)行的并發(fā)請求的最大數(shù)量,
# CONCURRENT_REQUESTS_PER_DOMAIN = 16 # 指任何單個域名執(zhí)行的并發(fā)(即同時)請求的最大數(shù)量
CONCURRENT_REQUESTS
全局并發(fā)請求 (CONCURRENT_REQUESTS): Scrapy會維護一個隊列,其中包含所有待處理的請求。當隊列中的請求數(shù)小于 CONCURRENT_REQUESTS 時,Scrapy會繼續(xù)添加新的請求到隊列中。一旦達到上限,Scrapy將停止添加新的請求,直到有請求完成并從隊列中移除。
CONCURRENT_REQUESTS_PER_IP
IP并發(fā)請求 (CONCURRENT_REQUESTS_PER_IP): Scrapy會為每個IP地址維護一個獨立的隊列。對于每個IP地址,如果其隊列中的請求數(shù)小于 CONCURRENT_REQUESTS_PER_IP,Scrapy將繼續(xù)向該IP地址發(fā)送請求。否則,它會暫停向該IP地址發(fā)送新請求,直到有請求完成并從隊列中移除。
CONCURRENT_REQUESTS_PER_DOMAIN
域名并發(fā)請求 (CONCURRENT_REQUESTS_PER_DOMAIN): Scrapy會為每個域名維護一個獨立的隊列。對于每個域名,如果其隊列中的請求數(shù)小于 CONCURRENT_REQUESTS_PER_DOMAIN,Scrapy將繼續(xù)向該域名發(fā)送請求。否則,它會暫停向該域名發(fā)送新請求,直到有請求完成并從隊列中移除。
1.2 延遲時間
DOWNLOAD_DELAY
# 設(shè)置在每次請求之間等待1秒
DOWNLOAD_DELAY = 1
DOWNLOAD_DELAY 是一個浮點數(shù)或整數(shù),表示在每次請求之間等待的秒數(shù)。默認值通常為 0,即沒有延遲。
1.3最大并發(fā)數(shù)和延遲時間
CONCURRENT_REQUESTS和DOWNLOAD_DELAY
現(xiàn)在假設(shè)一個場景
DOWNLOAD_DELAY = 1
CONCURRENT_REQUESTS =20
當我們有100個請求的時候,需要多少秒呢?
這里分為兩個情況:
第一個情況
(請求一秒內(nèi)可以完成)
我們的延遲時間是1秒,
所以每一個請求之間的延遲都是1秒,
所以100個請求需要100秒才能完成。
第二種情況
(請求需要很久,大于20秒以上,比如下載文件)
我們的延遲時間是1秒,
所以每一個請求之間的延遲都是1秒,
當?shù)降?0秒的時候,達到最大并發(fā)數(shù)20,
這時候即使到21秒,也不會進行第21個請求,
這時候100個請求需要100秒以上甚至幾分鐘才能完成。