11-多线程爬虫-掌握threading的基本使用

什么是多线程: 默认情况下,一个程序只有一个进程和一个线程,代码是依次线性执行的。而多线程则可以并发执行,一次性多个人做多件事,自然比单线程更快

11-多线程爬虫-掌握threading的基本使用

用threading模块写一个多线程程序
threading模块是python中专门提供用来做多线程编程的模块。threading模块中最常用的类是Thread

# 单线程执行与多线程执行

import time
import threading

def coding():
    for x in range(3):
        print("正在写代码{}...".format(x))
        time.sleep(1)
        
def drawing():
    for x in range(3):
        print("正在画图{}...".format(x))
        time.sleep(1)

# 单线程
def single_thread():
    print("-------------单线程执行-------------")
    coding()
    drawing()
    
# 多线程
def multi_thread():
    print("-------------多线程执行-------------")
    t1 = threading.Thread(target=coding)
    t2 = threading.Thread(target=drawing)
    
    t1.start()
    t2.start()
    
if __name__ == "__main__":
    single_thread()
    multi_thread()

执行结果

11-多线程爬虫-掌握threading的基本使用

继承自threading.Thread类
1.使用threading.current_thread()在线程中执行这个函数,会返回当前线程的对象
2.使用threading.enumerate()获取整个程序中所有的线程

为了让线程代码更好的封装,可以使用threading模块下的Thread类,继承自这个类,然后实现run方法,线程就会自动运行run方法中的代码
1.我们自己写的类必须继承自"threading.Thread"类
2.线程代码需要放在run方法中执行
3.以后创建线程的时候,直接使用我们自己创建的类来创建线程就可以了
4.为什么要使用类的方式创建线程,是因为类可以更加方便的管理我们的代码,可以让我们使用面向对象的方式进行编程

# 继承自threading.Thread类
# 使用类的方式,代码的封装性会更好一点

import threading
import time

class CodingThread(threading.Thread):
    def run(self):
        the_thread = threading.current_thread()
    
        for x in range(3):
            print("{1}\t{2}正在写代码{0}...".format(x,the_thread.name,the_thread))
            time.sleep(1)
            
class DrawingThread(threading.Thread):
    def run(self):
        the_thread = threading.current_thread()

        for x in range(3):
            print("{1}\t{2}正在画图{0}...".format(x,the_thread.name,the_thread))
            time.sleep(1)

def multi_thread():
    t1 = CodingThread(name="CodingThread")
    t2 = DrawingThread(name="DrawingThread")
    
    t1.start()
    t2.start()
    
    print("\n当前所有线程信息:{}\n".format(threading.enumerate()))
    
if __name__ == "__main__":
    multi_thread()

 

上一篇:python 多线程信号生产者消费者例子


下一篇:12-多线程爬虫-锁机制(threading.Lock类)