多线程编程分为两种方式:
- 实例化Thread
import time
from datetime import datetime
from threading import Thread
def 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 Thread
import time
from datetime import datetime
class SleepThread(Thread):
def __init__(self, sleep_time):
self.sleep_time = sleep_time
super().__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}")