scrapy engine:负责spider,ltenepipeline中间通讯,信号数据传递
scheduler:负责接收引擎发送request的请求,并按一定方式整理排列,入列当引擎需要时会还给引擎
downloader:负责下载scrapy engine发送所有requeste请求,将responses交给scrapy engine 有引擎交给spider处理
爬虫文件:负责所有responses,从中分析提取数据,获取item字段需要的数据,并将需要跟进的URL提交给引擎,然后再次进入调度器
item pipeline:负责处理从spider获取到的item并惊醒后期处理,进行分析过滤存储
Downloader middlewares:其实就是一个扩展的下载功能组件
spider middlewares:是一个扩展操作引擎的中间通信的功能中间组件
多线程的简单理解:
使用threading模块
如果某个子线程的daemon属性为False,主线程结束时会检测该子线程是否结束,如果该子线程还在运行,则主线程会等待它完成后再退出如果某个子线程的daemon属性为True,主线程运行结束时不对这个子线程进行检查而直接退出同时所有daemon值为True的子线程将随主线程一起结束,而不论是否运行完成属性daemon的值默认为False,如果需要修改,必须在调用start()方法启动线程之前进行设置
我们可以知道使用了多线程并发操作花费的时间会少很多,当调用了start方法才能启动线程之前进行设置,多线程的程序执行顺序并不确定,当线程被阻塞等待结束后线程就进入了准备就绪状态正在等待调度,而线程则会调度将自行选择一个线程执行。
线程互斥锁:
线程互斥锁有两个状态,一个状态是锁定和非锁定状态
当我们某个线程需要共享数据时,像锁定,此时资源就变成为锁定状态,其他不能更改(其实就是线程锁死其他线程不能操作,除非这个线程释放了资源,这个线程变成了非锁定状态)只有线程变成非锁定状态其他线程才能再次锁定该资源,互斥锁保证了每次只有一个线程进行写入操作,从而保证多线程我们数据的正确性
创建一个队列:queue_obj = queue.Queue(maxsize=30)
maxsize :表示允许存储的最 (FIFO) : 对列--先进先出
存值 : queue_obj.put( )
取值 : queue_obj.get( )
获取队列的大小 : queue_obj.qsize( )
判断队列是否满 : queue_obj.full( )
判断队列是否为空 : queue_obj.empty()
队列是线程安全的,list,dict 是非线程安全的,使用的时候最好使用线程锁
多线程
什么是多任务:同时执行多个任务 例如:同时打开微信,QQ,word,优酷,浏览器
同时执行--并行
单核同时执行的任务数量只有一个,但是看上去像是在执行多个任务,是 因为切换的间隔时间级短
多核cpu:同时可以执行多个任务,假如任务量超过核心数,在某个核心下 任务会交替执行
并发和并行的概念:
并发:单核cpu同时执行多个任务,任务是同时发起的,但是并不是同时执行,而是交替执行
并行:任务数量小于或等于核心数,这个时候每一个核心都在执行任务,任务是同时执行的,
实现多任务的手段(方式):
1.多线程
2.多进程
3.协程
线程之间的操作是无序的
一个线程下面有一个主线程
线程:相当于打开一个浏览器
进程:相当于在浏览器里面打开多个窗口
爬虫周末总结
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...