概述
在之前学习爬虫过程中,视频里讲的不是很完整,导致我学的很懵逼,现在有新的爬虫视频了,所以去重新学习下。
多线程
进程
是资源单位,启动某一个程序时默认会有一个进程,每一个进程里至少有一个线程;
线程
是执行单位。
先看以下的例子:
def func():
for i in range(1000):
print('func', i)
if __name__ == '__main__':
func()
for i in range(1000):
print('main', i)
这一段代码最后会先执行func()
,输出func+i
,然后再执行main()
函数,输出main+i
,不是多线程。
想要实现多线程,可以用threading
模块来实现
# 多线程
from threading import Thread
def func():
for i in range(1000):
print('func', i)
if __name__ == '__main__':
t = Thread(target=func) # 创建线程并给线程安排任务
t.start() # 开始执行该线程
for i in range(1000):
print('main', i)
可以看到在输出结果中,出现了大量排序错乱的问题,这是因为在子线程开始后,父线程继续运行,导致不同步的情况出现。
上面是第一种多线程的写法,还有第二种–继承Thread
后重写run()
函数
class Mythread(Thread):
def run(self):
for i in range(1000):
print('run', i)
if __name__ == '__main__':
t = Mythread()
t.start()
for i in range(1000):
print('main', i)
上面是函数无参数的情况,如果有参数,用下面的方法处理
from threading import Thread
def func(name):
for i in range(1000):
print(name, i)
if __name__ == '__main__':
t1 = Thread(target=func, args=('xay',)) # 创建线程并给线程安排任务
t1.start() # 开始执行该线程
t2 = Thread(target=func, args=('why',))
t2.start()
注意,args=
后面必须跟着是元组
多进程
与多线程类似
from multiprocessing import Process
def func():
for i in range(10000):
print('func', i)
if __name__ == '__main__':
p = Process(target=func)
p.start()
for i in range(10000):
print('main', i)