Python爬虫——多线程爬虫
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(