Scrapy中的并发设置很少,例如CONCURRENT_REQUESTS。这是否意味着,Scrapy爬虫是多线程的?因此,如果我运行scrapy crawl my_crawler
,它将并行地同时发出多个并发请求?
我问,因为,我已经读过Scrapy是单线程的。
答案 0 :(得分:11)
Scrapy是单线程的,除了交互式shell和一些测试,请参阅source。
它构建在Twisted之上,也是单线程的,并利用它自己的异步并发功能,例如twisted.internet.interfaces.IReactorThreads.callFromThread
,请参阅{{ 3}}
答案 1 :(得分:5)
Scrapy的大部分工作同步进行。但是,请求的处理是异步完成的。
如果您还没有看过,我建议使用此页面。
http://doc.scrapy.org/en/latest/topics/architecture.html
编辑: 我现在意识到问题是关于线程,而不一定是异步还是不同步。这个链接仍然是一个很好的阅读:)
关于您有关CONCURRENT_REQUESTS的问题。此设置会更改扭曲的请求数量。一旦启动了许多请求,它将等待其中一些请求在开始之前完成。
答案 2 :(得分:1)
Scrapy是单线程框架,我们不能同时在一个蜘蛛内使用多个线程。但是,我们可以同时创建多个蜘蛛和piplines,以使进程并发。
Scrapy不支持multi-threading
,因为它构建于Twisted
,Asynchronous http protocol framework
。