请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,scrapy使用代理api

scrapy是异步的,这个好理解,scrapy是多线程的还是多进程的呢,在哪里能看到?还有在scrapy中间件里使用request调用代理api,会不会破坏了scrapy的异步性

正在回答 回答被采纳积分+3

2回答

提问者 sjdgbhb 2019-10-08 09:03:57

scrapy能处理阻塞io,那么我在代码里加个sleep,或者使用selenium,这样还不会破坏异步性吗?好像会破坏,目前我写了一个代理中间件,用requests库调用的代理api,如果这不会破坏异步性,哪种写法会破坏异步,哪种不会呢

0 回复 有任何疑惑可以回复我~
  • bobby #1
    阻塞肯定能运行啊,只是写了阻塞代码会影响后续的请求的发出,使用selenium确实会破坏阻塞性,所以selenium课程中用的并不多,在模拟登陆的时候使用就行了。,毕竟登陆也不是每个请求都要做,还有一种解决更通用的是将模拟登陆分开成另一个独立的服务,这样scrapy就和这个登陆服务之间建立了一个cookie池了,这样就好多了。使用requests是同步io。如果少量使用还可以,大量使用肯定会破坏异步性的,解决办法就是使用aiohttp来替代requests
    回复 有任何疑惑可以回复我~ 2019-10-08 09:46:10
bobby 2019-10-08 08:37:53

scrapy 本身并没有什么太多的多线程和多进程等,因为scrapy底层是twisted,这个框架是一个异步io框架,是基于回调实现的,并不是多线程也不是多进程,回调比多线程和多进程性能都高,但是有一个很大的限制就是不能在代码中使用阻塞io方法,不然所有的请求都会被阻塞,但是有很多库都是同步io,所以为了解决这个问题twisted在启动的时候就会启动一个线程池,可以把阻塞的方法扔到这个线程池中去执行,使用ip代理并不会破坏异步性

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信