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) –