首先来体验下什么是多线程:
如图:利用多线程同时执行sing和worker2个函数:
'''多线程''' import time import threading def sing(): '''唱歌5秒钟''' for i in range(3): print("---正在唱歌---") time.sleep(1) # todo 创建Thread时执行的函数,运行结束,那么这个子线程就结束了 def worker(): '''工作5秒钟''' for i in range(3): print("---正在工作---") time.sleep(1) def run(): t1 = threading.Thread(target=sing) t2 = threading.Thread(target=worker) t1.start() t2.start() if __name__ == '__main__': run()
线程的创建从调用start方法开始,函数结束时,线程结束。
如图、;
'''多线程''' import time import threading def sing(): '''唱歌5秒钟''' for i in range(5): print("---第{}次唱歌---".format(i)) time.sleep(1) # todo 创建Thread时执行的函数,运行结束,那么这个子线程就结束了 def worker(): '''工作5秒钟''' for i in range(5): print("---第{}次工作---".format(i)) time.sleep(1) def run(): t1 = threading.Thread(target=sing) t2 = threading.Thread(target=worker) t1.start() # TODO 调用start时,线程创建。函数结束的时候,线程结束。 t2.start() while True: print(threading.enumerate()) if len(threading.enumerate()) == 1: return time.sleep(1) if __name__ == '__main__': run()
在类里面实现多线程,必须定义run方法,启动线程时实际是调用的run方法:
import threading import time class MyThreading(threading.Thread): def run(self): '''通过继承调用多线程必须有run方法''' for i in range(5): print("这是线程{}".format(i)) time.sleep(1) self.mut() def mut(self): for i in range(1,10): for j in range(1,i+1): print("{}*{}={}".format(i,j,(i*j)),end='\t') print() if __name__ == '__main__': mt = MyThreading() mt.start()
使用sleep来控制,线程的执行顺序: