我在这里找到了一种可能的解决方案:http : //compiletoi.net/fast-scraping-in-python-with- asyncio.html
同时执行3个请求很酷,但是同时执行5000个则不太好。如果您尝试同时执行太多请求,则连接可能会开始关闭,甚至可能被网站禁止。
为避免这种情况,可以使用信号灯。它是一个同步工具,可用于限制在某些时候执行某些操作的协程数量。我们只是在创建循环之前创建信号灯,将要允许的并发请求数作为参数传递:
sem = asyncio.Semaphore(5)
然后,我们只需替换:
page = yield from get(url, compress=True)
由同一件事,但受信号量保护:
with (yield from sem):
page = yield from get(url, compress=True)
这样可以确保最多可以同时执行5个请求。