scrapy在爬网页的时候是自动采用多线程的吗
scrapy基于twisted异步IO框架,downloader是多线程的。但是,由于python使用GIL(全局解释器锁,保证同时只有一个线程在使用解释器),这极大限制了并行性,在处理运算密集型程序的时候,Python的多线程效果很差,而如果开多个线程进行耗时的IO操作时,Python的多线程才能发挥出更大的作用。(因为Python在进行长时IO操作时会释放GIL)所以简单的说,scrapy是多线程的,不许要再设置了,由于目前版本python的特性,多线程地不是很完全,但实际测试scrapy效率还可以。
■网友
自动的。配置里可以设线程数。代码写的不对的话,有时候多到关不掉。。
■网友
自动就是多线程的,修改线程数可以参看这个文章。http://twistedmatrix.com/documents/10.1.0/core/howto/threading.html
■网友
因为Python GIL的存在,scrapy无论如何设置都是单线程的。Scrapy里默认是10线程的设置是指的Twisted的线程,可以用来并行处理DNS之类的。
【scrapy在爬网页的时候是自动采用多线程的吗】 但上面这些都不重要,因为爬虫是IO密集型的操作,所以只要有并发就可以了,无论是利用协程,callback还是其他方式实现并发。所以你要修改的不是线程数目而是Scrapy里request的并行数,只要这个数目大了一般速度都会增快,如果并行大了速度却没有提升,可能是DOWNLOAD_DELAY太大了,或者用了blocking的pipeline,等等原因吧需要自己去思考
这种问题在上问没什么意义,不如直接去仔细读读文档
■网友
scrapy自带twisted线程池,默认是10个线程。
■网友
默认启动的话,可以看到scrapy有10个线程。但是,进行download以及parse 等一般性操作的时候,都是单线程的——都是在同一个线程内。修改REACTOR_THREADPOOL_MAXSIZE配置可以改变启动的线程数。scrapy文档对REACTOR_THREADPOOL_MAXSIZE的说明是:The maximum limit for Twisted Reactor thread pool size. This is common multi-purpose thread pool used by various Scrapy components. Threaded DNS Resolver, BlockingFeedStorage, S3FilesStore just to name a few. Increase this value if you’re experiencing problems with insufficient blocking IO.从这里看,DNS 解析等会用到这些线程。PS:因需要改写了默认downloader,改写后启动只有1个线程。只好追查自定义的downloader有什么问题。最后只看到10个线程只是干了DNS解析的事。
■网友
看文档
CONCURRENT_REQUESTSDefault: 16The maximum number of concurrent (ie. simultaneous) requests that will be performed by the Scrapy downloader.默认16个并发请求
Settings - Scrapy 1.5.1 documentation
■网友
在哪个文件中修改scrapy的线程数目呢?我看网上都说使用from twisted.internet import reactorreactor.suggestThreadPoolSize(30)这两句话就可以修改,但是我试了没有用。。
推荐阅读
- 栖霞山@正是栖霞山赏枫好时候 栖霞丹枫似火若霞
- 想寒假的时候一个月在家准备计算机二级的office高级应用,但是不知道买啥书比较好~~~?
- 环球车讯网|终于等到了,奥德赛跌至21.98万元,是时候入手了
- PS网页版
- 读书读到3分之一的时候感觉很难理解,要不要继续
- 网页设计和嵌入式哪个发展好一点?
- 销量|考验品牌力的时候到了,三缸雷凌开启预售,销量是增还是减?
- 考研的时候通过啥渠道获得自己需要的信息
- 在老板否定你的时候,怎样正确的表达出自己的看法
- 乱停车|海安江海清水园小区乱停车现象什么时候能管理好?
