什么是多线程: 默认情况下,一个程序只有一个进程和一个线程,代码是依次线性执行的。而多线程则可以并发执行,一次性多个人做多件事,自然比单线程更快
用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()
执行结果
继承自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()