Scrapy中几乎没有并发设置,如CONCURRENT_REQUESTS。这是不是说,Scrapy爬虫是多线程的?所以如果我运行scrapy crawl my_crawler
它会逐字地同时触发多个并发请求? 我问,因为我读过Scrapy是单线程的。是Scrapy单线程还是多线程?
回答
Scrapy是单线程的,除了交互式shell和一些测试,请参阅source。
它建立在Twisted之上,它也是单线程的,并且利用它自己的异步并发功能,如twisted.internet.interfaces.IReactorThreads.callFromThread
,请参阅source。
然后这些设置的意义何在? –
异步意味着可以有多个并发请求。您可以发送请求A,并在返回之前发出另一个请求B,以便您有两个并行请求。 –
我正在尝试将我的拼贴结果写入单个文本文件。我知道明白那是一件坏事...或者它是? – deostroll
Scrapy可以同步执行大部分工作。但是,请求的处理是异步完成的。
如果您还没有看到它,我建议您阅读此页。
http://doc.scrapy.org/en/latest/topics/architecture.html
编辑: 我现在意识到的问题是关于线程并不见得它是否是异步与否。该链接仍然是一个很好的阅读,虽然:)
关于您CONCURRENT_REQUESTS的问题。该设置可以改变一次扭曲的请求数量。一旦开始许多请求,它将等待其中一些完成,然后再开始更多。
Scrapy是单线程框架,我们不能同时在一个蜘蛛内使用多个线程。但是,我们可以同时创建多个spider和pipline,以使进程并发。 Scrapy不支持multi-threading
,因为它构建于Twisted
,这是一个Asynchronous http protocol framework
。
- 1. 线程还是多进程?
- 2. 主线程是前台线程还是后台线程?
- 3. SpringMVC是在单线程模型还是多线程模型上工作?
- 4. 有关redis工作的冲突:Redis是单线程还是多线程?
- 5. Android,Handler是在主线程还是其他线程中运行?
- 6. 是OnTangoImageAvailableEventHandler()多线程?
- 7. 是CefSharp多线程?
- 8. log4net是单线程?
- 9. 是IISExpress单线程?
- 10. 单线程C多线程#
- 11. 多线程vs单线程
- 12. java编程和java单线程多线程问题(单线程与多线程)
- 13. 为什么我的多线程执行是单线程模式
- 14. Python的多线程代码是慢于单线程
- 15. 多线程是不是程序版本
- 16. Python线程不是线程
- 17. 检查Web应用程序是在线还是离线
- 18. 我还需要多线程还是已经过时了?
- 19. Ruby线程问题还是无线程问题?
- 20. C++服务器 - 要线程还是不线程?
- 21. 多线程实例访问时是否是线程池线程安全?
- 22. 异步调用的核心是python线程还是多处理?
- 23. 重构多线程类为单线程+多线程
- 24. Java线程,绿色还是本地?
- 25. popen - 锁还是不线程安全?
- 26. clojure是“多线程”吗?
- 27. Apache不是多线程的?
- 28. Sinatra是多线程的吗?
- 29. 多线程不是蟒蛇
- 30. RxJava是多线程的吗?
Scrapy使用Twisted,并使用单线程异步编程模型。你可以阅读[in](http://krondo.com/wp-content/uploads/2009/08/twisted-intro.html)[various](http://krondo.com/wp-content/uploads /2009/08/twisted-intro.html)[places](http://jessenoller.com/blog/2009/02/11/twisted-hello-asynchronous-programming) –