美文网首页我爱编程
python 爬虫之--多线程

python 爬虫之--多线程

作者: 佐卡ww | 来源:发表于2018-07-26 11:59 被阅读0次

    二、多线程

    线程:比如qq。比如暴风影音,比如word

    可以同时语音、同时视频、同时聊天,多线程

    暴风影音,视频播放、音频播放,多线程

    word,打字,拼写检查,等,多线程

    多任务的实现:多进程、多线程

    主进程-子进程1-子进程2      特点:进程之间没有关系,如果一个进程挂了,不影响其它子进程

    进程-主线程-子线程1-子线程2

    特点:线程之间有关系,如果一个线程挂了,整个进程就挂了

    实现方式:(thread)

    面向过程

    t = Thread(target=xxx, name=xxx, args=(xxx,))

    target: 线程启动之后要执行的函数

    name: 线程的名字

    args: 给线程传递的参数

    t.start(): 启动线程

    t.join(): 让主线程等待子线程结束

    threading.current_thread().name : 获取线程名字

    面向对象

    见代码

    全局变量

    共享全局变量

    局部变量

    不共享局部变量

    线程安全问题

    线程之间可以共享全局变量

    加锁

    3、队列

    队列:买火车票,电动三轮,特点:先进先出

    用在哪?线程之间使用队列进行交互,让线程解耦合,生产者-消费者模型

    线程1-生产数据

    交互渠道:队列

    线程2-消费数据

    while 1:

    生产数据

    消费数据

    队列使用:

    from queue import Queue

    q = Queue(5)

    q.put()        添加元素

    q.put(False)    如果队列已满,添加元素立即抛出异常

    q.put(True, 5)  如果队列已满,添加元素5s之后抛出异常

    q.get()        获取元素

    q.get(False)    如果队列为空,获取元素立即抛出异常

    q.get(True, 5)  如果队列为空,获取元素5s之后抛出异常

    q.empty()      队列是否为空

    q.full()        队列是否已满

    q.qsize()      队列长度

    4、多线程爬虫

    分析:爬虫里面如何分多线程,

    循环:

    拼接url,发送请求,获取响应

    解析响应,保存到文件

    涉及到:

    采集线程,3个线程同时采集

    解析线程,3个线程同时解析

    页码队列:里面是要爬取的页码数据

    数据队列:采集线程向队列中添加数据

    解析线程从队列中获取数据

    保存到同一个文件中,锁机制

    相关文章

      网友评论

        本文标题:python 爬虫之--多线程

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