从开发者的角度,你会喜欢 Scrapy的基于事件的架构(见第8章和第9章)。它可以让我们进行串联操作,清洗、形成、丰富数据,或存入数据库等等,同时不会有太大的性能损耗。从技术上说,基于事件的机制, Scrapy可以让吞吐量摆脱延迟,同时开放数千个连接。举一个极端的例子,假设你要从一个网站提取列表,每页有100个列表项。 Scrapy可以轻松的同时处理16个请求,假设每个请求在一秒內完成,每秒就可以抓取16个页面。乘以每页的列表数,每秒就可以抓取1600个列表项。然后,你想将每个列表项写入一个高并发的云存储,每个要花3秒。为了支持每秒16个请求,必须要并行进行4800个写入请求(第9章你会看到更多类似的计算)。对于传统的多线程应用,这需要4800个线程,对你和操作系统都是个挑战。在 Scrapy中,4800个并发请求很平常,只要操作系统支持就行。更进一步, Scrap的内存要求和你要抓取的列表项的数据量相关,而对于多线程应用,每个线程的大小都和一个列表的大小相当。