Python爬虫——多线程爬虫如何实现?

本文介绍了Python中多线程的概念,包括线程、主线程与子线程的区别,如何创建子线程,以及线程间的通信问题。讨论了线程间的资源竞争和互斥锁机制,防止死锁的发生,并引入了Queue线程来实现线程安全的通信。最后,通过示例展示了线程同步的实现方法。
摘要由CSDN通过智能技术生成

1.多任务

多任务指的是在同一时间不同任务需要同时进行的场景,比如边听歌边刷题,边看电视边吃饭…

  • 要实现多任务的进行,我们首先会想到的方式如下:
import time

# 吃饭
def Eat():
    for i in range(4):
        print('eating...')
        time.sleep(1)
# 看电视
def Watch():
    for i in range(4):
        print('watching...')
        time.sleep(1)

if __name__ == '__main__':
    Eat()
    Watch()
    
# --结果:--
# eating...
# eating...
# eating...
# eating...
# watching...
# watching...
# watching...
# watching...

嗯,,,但这是同时进行吗?仔细一想他们是有先后顺序的吧。

2.主线程与子线程

2.1 何谓线程、主线程及子线程

  • 线程:每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。
  • 主线程:程序启动时自己执行本身的代码的线程
    子线程:用户自己创建的线程
  • 主线程和子线程之间的关系:主线程是在子线程结束之后再执行的
  • 实现方式:join()方法,使子线程结束后再执行主线程;setDaemon()守护线程,不会等待子线程,有空就执行
    看看代码和结果消化一下吧!
import threading
import time

def speak():
    # 子线程
    print('A先说!')
    time.sleep(1)

if __name__ == '__main__':
    for i in range(5):
        t = threading.Thread(target=speak)
        t.start()
    print('B有话要说!')

结果(执行了几十次吧)出现了以下三种情况:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在t.start()后面添加

t.join()

时间会按照先后顺序来了,但是结果确实只有第三种了,剩下的setDaemon()加了与没加效果一样

2.2 查看线程数量

有事我们需要查看有哪些进程运行了可以使用:threading.enumerate()

例如:

import threading
import time

def speak():
    # 子线程
    print('A先说!')
    time.sleep(1)

if __name__ == '__main__':
    for i in range(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值