美文网首页
爬虫周末总结

爬虫周末总结

作者: 唐朝集团 | 来源:发表于2018-12-02 19:38 被阅读0次

    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.协程
    线程之间的操作是无序的
    一个线程下面有一个主线程
    线程:相当于打开一个浏览器
    进程:相当于在浏览器里面打开多个窗口

    相关文章

      网友评论

          本文标题:爬虫周末总结

          本文链接:https://www.haomeiwen.com/subject/zmqscqtx.html