1. 单线程
import threading
import time
def dance():
for i in range(5):
time_ = time.time()
current_time = time.localtime(time_)[0:6]
print("我喜欢跳舞"+"\t"+"%d-%d-%d\t%d:%d:%d"%(current_time))
time.sleep(1)
def sing():
for i in range(5):
time_ = time.time()
current_time = time.localtime(time_)[0:6]
print("我喜欢唱歌"+"\t"+"%d-%d-%d\t%d:%d:%d"%(current_time))
time.sleep(1)
if __name__ == '__main__':
dance()
sing()
为了方便演示,我在每一个打印的后面加了时间戳
因为这个过程只使用了主线程,所以,整个过程的时间是两个过程的叠加,为10s。
2. 多线程:threading.Thread() + threading.start()
import threading
import time
def dance():
for i in range(5):
time_ = time.time()
current_time = time.localtime(time_)[0:6]
print("我喜欢跳舞"+"\t"+"%d-%d-%d\t%d:%d:%d"%(current_time))
time.sleep(1)
def sing():
for i in range(5):
time_ = time.time()
current_time = time.localtime(time_)[0:6]
print("我喜欢唱歌"+"\t"+"%d-%d-%d\t%d:%d:%d"%(current_time))
time.sleep(1)
if __name__ == '__main__':
thread_1 = threading.Thread(target=dance)
thread_1.start()
sing()
这里除了主程序(主线程)之外,还启动了thread1线程,这样可以实现两个线程同时工作,从结果可以看出,只用了5s的时间就完成了全部的工作。
3. 守护线程:threading.Thread().setDaemon
守护线程,指的是通过对主线程之外的其他子线程进行限制,达到 “当主线程退出的时候,其他线程无论是否执行完,都强制退出” 的目的。这里的守护,指的是其他线程守护主线程。
3.1 未使用守护线程
import threading
import time
def dance():
for i in range(15): ##这里让子线程执行的次数增多,为了让效果更清晰一些
time_ = time.time()
current_time = time.localtime(time_)[0:6]
print("我喜欢跳舞"+"\t"+"%d-%d-%d\t%d:%d:%d"%(current_time))
time.sleep(1)
def sing():
for i in range(5):
time_ = time.time()
current_time = time.localtime(time_)[0:6]
print("我喜欢唱歌"+"\t"+"%d-%d-%d\t%d:%d:%d"%(current_time))
time.sleep(1)
if __name__ == '__main__':
thread_1 = threading.Thread(target=dance)
thread_1.start()
sing()
exit()
3.2 使用线程守护
import threading
import time
def dance():
for i in range(15):
time_ = time.time()
current_time = time.localtime(time_)[0:6]
print("我喜欢跳舞"+"\t"+"%d-%d-%d\t%d:%d:%d"%(current_time))
time.sleep(1)
def sing():
for i in range(5):
time_ = time.time()
current_time = time.localtime(time_)[0:6]
print("我喜欢唱歌"+"\t"+"%d-%d-%d\t%d:%d:%d"%(current_time))
time.sleep(1)
if __name__ == '__main__':
thread_1 = threading.Thread(target=dance)
thread_1.setDaemon(True) ## 在start之前设置线程守护为True
thread_1.start()
sing()
exit()