DOWNLOAD_DELAY 设成 0.2 秒,请求之间的间隔真的是 200 毫秒吗?抖动开着的时候间隔是什么分布?这篇在服务器端记录每个请求到达的时间,把间隔分布、慢响应的影响、多域名与单域名覆盖都量出来。
DOWNLOAD_DELAY_JITTER=(默认) 间隔 ms:最小 125、P10 169、中位数 253、P90 290、最大 300、平均 243;总耗时 24.2 s DOWNLOAD_DELAY_JITTER=0 间隔 ms:最小 186、P10 200、中位数 201、P90 202、最大 251、平均 201;总耗时 20.1 s DOWNLOAD_DELAY_JITTER=0.5 间隔 ms:最小 125、P10 162、中位数 256、P90 293、最大 301、平均 244;总耗时 24.4 s DOWNLOAD_DELAY_JITTER=1.0 间隔 ms:最小 30、P10 129、中位数 300、P90 392、最大 401、平均 286;总耗时 28.5 s
2.19 里 DOWNLOAD_DELAY_JITTER(默认 0.5)取代旧的 RANDOMIZE_DOWNLOAD_DELAY。开着抖动时,实际平均间隔比设置值长约 20%——每次放行前都重新抽一次随机延迟,延迟没到才继续等,所以间隔偏向抖动范围的上端。要精确的节奏就把抖动设成 0。
RANDOMIZE_DOWNLOAD_DELAY=False 间隔 ms:最小 199、P10 200、中位数 201、P90 202、最大 218、平均 201
警告:The RANDOMIZE_DOWNLOAD_DELAY setting is deprecated, use DOWNLOAD_DELAY_JITTER instead: it takes the magnitude of the random variation as a number, e.g
RANDOMIZE_DOWNLOAD_DELAY=True 间隔 ms:最小 118、P10 156、中位数 244、P90 291、最大 301、平均 232
警告:The RANDOMIZE_DOWNLOAD_DELAY setting is deprecated, use DOWNLOAD_DELAY_JITTER instead: it takes the magnitude of the random variation as a number, e.g旧设置 RANDOMIZE_DOWNLOAD_DELAY 仍然生效(False 关掉抖动,True 开启 ±50%),但已弃用并会警告。
间隔 ms:最小 96、P10 100、中位数 101、P90 102、最大 104、平均 101;服务器同时处理的峰值 7(≈ 0.6 ÷ 0.1 = 6);总耗时 3.0 s(24×0.1 + 0.6 ≈ 3.0)
延迟计的是两个请求先后放行的间隔,不等响应。响应慢时,延迟不变,在途请求数变成响应耗时除以延迟。
一个域名 20 个请求:总耗时 4.0 s;两个域名各 20 个(共 40 个):总耗时 4.0 s;理想值 20×0.2 = 4.0 s 两个域名的请求到达顺序(1=127.0.0.1,l=localhost):l1l1l1l1l1l1l1l1l1l1l1l1l1l1l1l1l1l1l1l1
每个下载槽(域名)独立计时,两个域名同时爬不会互相等待。
127.0.0.1 间隔 ms:最小 50、P10 50、中位数 51、P90 52、最大 53、平均 51 localhost 间隔 ms:最小 297、P10 300、中位数 301、P90 302、最大 302、平均 301 总耗时 5.7 s(localhost 慢的那个决定:20×0.3 = 6.0)
DOWNLOAD_SLOTS 可以给某个域名单独设置 delay(以及 concurrency、jitter),比全局设置优先。
只有 spider.download_delay = 0.3:间隔 ms:最小 300、P10 300、中位数 301、P90 303、最大 303、平均 301 警告:The 'download_delay' spider attribute is deprecated. Use the DOWNLOAD_DELAY setting instead.
旧写法 download_delay = 0.3 作为 spider 优先级的设置仍然生效,同样会警告弃用。