首先來體驗下什么是多線程:
如圖:利用多線程同時執行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來控制,線程的執行順序: