scrapy机制mark(基于twisted)
Posted justaman
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scrapy机制mark(基于twisted)相关的知识,希望对你有一定的参考价值。
twisted
twisted管理了所有的异步任务
Twisted的主线程是单线程的,即reactor线程;
而这些io耗时操作会在线程池中运行,不再twisted主线程中运行,即通过线程池来执行异步任务
即twisted通过事件循环(reactor)+线程池来实现异步 IO 的效果
线程池大小默认是10,即这就是异步任务们的瓶颈
scarpy业务代码
scrapy是基于twisted的异步IO框架
我们自己的scrapy业务代码也是单线程的
(而scrapy的多线程是用来做一些与主流程无关的事,信号监听之类的)
scarpy业务代码与twisted
我们的scrapy业务代码和twisted代码是独立的
通过回调函数来实现交互
我们的代码与Twisted代码运行在同一个进程中,只能同时有一个在运行
即通过分配时间片来交替执行,这样不会堵塞我们的逻辑代码
总结:
scarpy业务代码将任务交给twisted,twisted交给线程池
具体:逻辑代码调用异步任务,立刻返回deferred,主线程接着向下走,任务交给twisted线程池,任务结束后,会去自动触发Deferred的回调操作
我们要做的,就是添加这个回调逻辑
CONCURRENT_REQUESTS只是传给 Twisted 的 Deferred 对象数量,就是可以返回多少个deferred,而deferred是依赖于线程池
scarpy是单线程的,但任务实现了多线程;又python解释器有GIL,所以本质还是单线程的
以上是关于scrapy机制mark(基于twisted)的主要内容,如果未能解决你的问题,请参考以下文章