最近使用 python aiohttp 进行异步的发送请求,在命令行中 用py-spy 来监控了一下 发现 运行python程序 创建了 125 线程,吓了我一跳。
Google了很久 找到解决方法了。
原因:每次发送请求时 aiohttp.ClientSession 查询dns 。这个查询dns是阻塞的,所以它每次查询dns时开启一个线程的。
所以我在代码里 给它指定了 dns查询对象 起作用了。
from aiohttp.resolver import AsyncResolver
resolver = AsyncResolver()
tcp_conn = aiohttp.TCPConnector(resolver=resolver)
async with aiohttp.ClientSession(connector=tcp_conn) as session:
await process_spider(spider, session)
运行程序时 有可能提示 需要aiodns
. 安装即可: pip install aiodns
.