我最近在我的项目中运行了一个spider,但我觉得它像scrapy一样,它会等待一个页面完成后才移动到另一个页面。如果我对scrapy的性质没有错,它会移动到另一个页面,直到收到前一个页面的响应。in this page向下滚动后,我看到使用了async def
,这意味着通过添加该方法显式地使该方法异步。如果我不这样做,不要在我的spider中放入async-await
,它们不会变得异步吗?它们会等到收到响应吗?如果我有任何误解,请告诉我,并提前谢谢。
我最近在我的项目中运行了一个spider,但我觉得它像scrapy一样,它会等待一个页面完成后才移动到另一个页面。如果我对scrapy的性质没有错,它会移动到另一个页面,直到收到前一个页面的响应。in this page向下滚动后,我看到使用了async def
,这意味着通过添加该方法显式地使该方法异步。如果我不这样做,不要在我的spider中放入async-await
,它们不会变得异步吗?它们会等到收到响应吗?如果我有任何误解,请告诉我,并提前谢谢。
2条答案
按热度按时间f3temu5u1#
是的,正如Gallaecio所说,Scrapy默认是异步的.我想补充的是,我可以使代码的同步部分异步.这样,
同步请求
异步请求
thigvfpy2#
Scrapy默认为异步。
使用Scrapy 2.0中引入的coroutine syntax,在使用Twisted Deferred时只允许更简单的语法,这在大多数用例中是不需要的,因为Scrapy尽可能地使其使用透明。
您的spider之所以看起来是同步的,唯一的原因是您只从先前请求的回调中产生了一个新的
Request
对象。如果您从start_requests
产生了多个请求,或者在start_urls
中有多个URL,这些请求将根据您的并发设置(Scrapy的默认值是每个域8个并发请求,总共16个)被异步处理。