域名级并发控制需为每个域名独立维护计数器,通过 domain_locks 字典存储域名对应 count 和 lock,请求前调用 acquire_domain_slot 加锁检查并增减计数,确保各域名并发数不超限。

Python多线程爬虫中,域名级并发控制不是简单限制总线程数,而是要确保同一域名下的请求在任意时刻不超过设定的并发上限(比如每个域名最多 2 个请求同时进行),避免被封、降低服务器压力,也更符合 robots.txt 规范。
核心思路:为每个域名维护一个计数器,每次发请求前加锁检查并+1,请求完成后再-1。不能只靠全局线程池限流,因为不同域名会互相抢占额度。
example.com),值为 {'count': 0, 'lock': threading.Lock()}
acquire_domain_slot(domain):获取对应 lock → 加锁 → 检查 count
release_domain_slot(domain):加锁 → count -= 1 → 解锁(建议用 try/finally 保证释放)别让每个爬虫任务手动调 acquire/release —— 容易遗漏或出错。推荐封装一个安全的 safe_get(url, **kw) 函数:
urllib.parse.urlparse + 去除 www、端口等)threading.Thread 或 concurrent.futures.ThreadPoolExecutor 可照常使用,但注意:
立即学习“Python免费学习笔记(深入)”;
'rate_limit': 1,并在 acquire 里做判断网络请求可能卡住或异常退出,导致 slot 占用不释放(即“泄露”)。必须预防:
基本上就这些。域名级并发控制本质是“带锁的 per-host 计数器”,不复杂但容易忽略细节。写好 safe_get 封装后,业务逻辑就能专注解析,不用操心限流。
以上就是Python多线程爬虫如何构建域名级并发控制系统【技巧】的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号