threading介绍
threading库是Python标准库中用于实现多线程编程的模块,提供了一些操作线程的方法和类,可以方便地实现多线程的并发执行。
threading库中常用的类和方法包括:
Thread类:表示一个线程,通过继承Thread类并重写run()方法可以实现自定义的线程逻辑。
Lock和RLock类:用于控制多个线程对共享资源的访问,Lock类是简单的锁,RLock类是可重入的锁。
Event和Condition类:用于协调多个线程的执行,Event类用于控制线程的执行状态,Condition类用于线程间的通信和协调。
Timer类:用于实现线程定时任务。
ThreadLocal类:用于实现线程局部变量。
使用threading库可以方便地实现多线程编程,提高程序的并发性能和效率。同时,由于Python语言的GIL(全局解释器锁)机制,多线程程序在执行时可能存在一些潜在的问题,需要注意线程安全和共享资源的访问问题。
threading源码
import time
import threading
# threading库python自带,无需安装
# 安装time库
# pip install time -i
# -*- coding: utf-8 -*-
import time
import threading
def video1(video):
for i in range(0,len(video)):
print("第" + str(i + 1) + "视频是:" + str(video[i]))
print("当前时间:",time.strftime('%H-%M-%S', time.localtime()))
time.sleep(4)# 设每一首歌曲的时间是4秒
print("切换下一个视频...")
def video2(number):
daima = 0
while daima <= number:
print(f"我在敲第{daima + 1}行代码")
daima += 1
print("当前时间:",time.strftime('%H-%M-%S', time.localtime()))
time.sleep(2)#设每写一行代码的时间为2秒
def main():
print("\t\t***我想看视频,还想敲代码,最好可以边看视频边敲代码***\n")
# 我要看的视频名称
video = ['中国机长', "速度与激情10", "生化危机"]
number = 9
threads = []
# 将看的视频放到列表里面
thing1 = threading.Thread(target=video1, args=(video,))
threads.append(thing1)
# 将敲代码次数也放进去
thing2 = threading.Thread(target=video2, args=(number,))
threads.append(thing2)
# 开始的时间
start = time.time()
# 同时进行
for thing in threads:
# setDaemon为主线程启动了线程matter1和matter2
thing.setDaemon(True)
thing.start()
# 子线程没结束前主线程会被卡在这里
thing1.join()
thing2.join()
print("看完了,不看了。")
# 结束时间
end = time.time()
print(f"完成时间:{end - start}")
if __name__ == '__main__':
main()
效果