线程是程序执行的最小单位,一个进程至少有一个线程。
在爬虫中,可以通过异步爬虫提高爬虫效率,常见的异步爬虫有多线程、多进程、协程等
本文主要介绍python中多线程的简单实现,欢迎大家讨论学习!
在 Python 中,实现多线程的模块叫作 threading,是 Python 自带的模块。
一.直接创建多线程
我们可以使用 Thread 类来创建一个线程,创建时需要指定 target 参数为运行的方法名称。
from threading import Thread
def son():
for i in range(1,1501):
print('子线程',i)
if __name__ == '__main__':
thr = Thread(target=son)
thr.start()
for i in range(2501,3001):
print('主线程',i)
thr = Thread(target=son)表示创建子线程,thr.start()表示子线程为开始工作状态,具体运行时间有CPU决定。
如果是单线程运行,输出结果就是一排排整齐的输出,而上面的多线程程序中多线程同时运行,运行结果有重复,如下图。
二.继承Thread类创建子线程
另外,我们也可以通过继承 Thread 类的方式创建一个线程,该线程需要执行的方法写在类的 run 方法里面即可。
据此可改写上述程序。
from threading import Thread
class mythread(Thread):
def run(self):
for i in range(1,1501):
print('子线程',i)
if __name__ == '__main__':
thr = mythread()
thr.start()
for i in range(2501, 3001):
print('主线程', i)
注意: thr.start()表示开始子线程,若写thr.run()则表示单线程。
运行结果如下图,可以看出运行了多线程。
三.线程传参
如果被调用的方法需要传入额外的参数,则可以通过 Thread 的 args 参数来实现。例:
from threading import Thread
def son(para):
for i in range(1,1501):
print(para,i)
if __name__ == "__main__":
thr1 = Thread(target=son,args=('繁',))
thr2 = Thread(target=son,args=('漪',))
thr1.start()
thr2.start()
程序开启了两个子线程,为区分它们,对其传入参数para,利用Thread 的 args 参数来实现,特别提醒:创建子线程传参数以元组的形式表示,即(‘繁’,) (‘漪’,)
结果如下: