多线程编程分为两种方式:
- 实例化Thread
import timefrom datetime import datetimefrom threading import Threaddef sleep_tast(sleep_time):print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))print(f"sleep {sleep_time} seconds start!")time.sleep(sleep_time)print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))print(f"sleep {sleep_time} seconds end!")if __name__ == "__main__":start_time = time.time()# 当程序启动的时候会默认开启一个主线程# 如何让主线程等到其它线程执行完后才继续执行, join方法# 主线程给子线程2.5s的时间,如果执行不完也会结束,防止子线程占用资源卡死,setDaemon方法 守护线程t1 = Thread(target = sleep_tast, args = (2,))t1.setDaemon(True)t1.start()t2 = Thread(target = sleep_tast, args = (3,))t2.setDaemon(True)t2.start()# t2.join()time.sleep(2.5)end_time = time.time()print(f"last_time:{end_time - start_time}")
- 继承Thrad类
from threading import Threadimport timefrom datetime import datetimeclass SleepThread(Thread):def __init__(self, sleep_time):self.sleep_time = sleep_timesuper().__init__() # 调用父类的init方法def run(self):print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))print(f"sleep {self.sleep_time} seconds start!")time.sleep(self.sleep_time)print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))print(f"sleep {self.sleep_time} seconds end!")if __name__ == "__main__":start_time = time.time()# 当程序启动的时候会默认开启一个主线程# 如何让主线程等到其它线程执行完后才继续执行, join方法# 主线程给子线程2.5s的时间,如果执行不完也会结束,防止子线程占用资源卡死,setDaemon方法 守护线程t1 = SleepThread(2)t1.setDaemon(True)t1.start()# t1.join()t2 = SleepThread(3)t2.setDaemon(True)t2.start()time.sleep(2.5)end_time = time.time()print(f"last_time:{end_time - start_time}")
