用nodejs写爬虫的时候,使用了类似这样的函数
let conn = null;
try{
conn = await pool.getConnection();
await conn.begin()
let rst = await .conn.query('xxxx',params);
// 处理rst
...
await conn.commit()
}catch(e){
if(conn) await conn.rollback();
}finally{
if(conn) await conn.release();
}
乍一看没有问题,执行爬虫之后,我会调用这段代码把分析过的数据存在数据库里。
但是由于我是使用非阻塞的形式进行抓取数据的,如下
emitter.on('url_found', async (url)=>{
// 请求url地址,获取返回的response body
let res = await request(url);
// 处理res
...
// 后面调用上面的第一段代码
})
这里会发生一件事,就是可能同时触发了1000个这样的事件,然后一起获取链接,但是还没有释放,然后报错: too many connections