关于scrapy数据库异步操作
来源:7-8 职位信息入库-2
慕婉清4097246
2019-11-27
老师你好,请教两个关于scrapy的问题:1)yield 多个scrapy.Request出去,callback指向同一个函数,在callback函数中time.sleep, 会不会阻塞别的request的callback处理? 我调试的结果:看起来会阻塞
2)yield 几十上百个scrapy.Request出去, 所有request的callback里提取页面内容将item yield出去后退出。pipeline中用adbapi异步写数据库,但是异步数据库操作会随着callback跑完退出、spider关闭 而终止,异步数据操作写不完 上面两个问题好像相互矛盾:要等异步数据库操作完成,就得让spider不退出,要让spider不退出,就得让最后一个request的callback不退出或延时退出,但延时又会阻塞其它的request的处理。请解答,谢谢
写回答
1回答
-
bobby
2019-11-28
确实会的,这个我也强调过在scrapy中不要用同步的方法
adbapi的好处就是可以快速的将请求发送出去,也就是快速的交给mysql去处理
整个scrapy的处理是单线程的,因为底层依赖的是twisted,所以不论是入库还是继续请求url都是在一个线程中,也就是按顺序执行的,这个也就是为什么在pipeline中不建议使用同步的方式入库的原因
022019-12-01
相似问题