是Scrapy单线程还是多线程?

时间:2014-07-15 14:38:44

标签: python multithreading scrapy web-crawler

Scrapy中的并发设置很少,例如CONCURRENT_REQUESTS。这是否意味着,Scrapy爬虫是多线程的?因此,如果我运行scrapy crawl my_crawler,它将并行地同时发出多个并发请求? 我问,因为,我已经读过Scrapy是单线程的。

3 个答案:

答案 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,因为它构建于TwistedAsynchronous http protocol framework