python线程:threading
线程的概念:简单理解就是操作系统对cup资源的分配调度
下面用实例来讲一下threading的用法:
我们假设你想听歌、看电影来度过愉快的周末,以前的操作系统都是单个处理任务,但是现在cpu,你可以同时做很多种事情。
直接上代码,代码上看注释
-
import threading
-
from time import ctime, sleep
-
-
# 听歌、看电影可以在一个播放器下进行,我们要传入文件、播放时间
-
def super_player(file, time):
-
-
# 这个循环可以设置每个文件的播放次数
-
for i in range(2):
-
-
# 打印出播放的是什么文件、时长、当前时间
-
print("This play %s. time: %s accrount_time: %s" % (file, time, ctime()))
-
sleep(time)
-
-
-
-
if __name__ == '__main__':
-
-
# 用一个字典来放你想要操作的任务
-
play_dict = {
-
'往后余生.mp3': 3,
-
'肖申克的救赎.mp4': 5,
-
'这个杀手不太冷.mp4': 4,
-
}
-
-
# 弄一个线程列表放所开的线程
-
threads = []
-
-
# 来个循环开多个线程执行你要操作的任务
-
for file, time in play_dict.items():
-
-
# 为所需要的任务,开一个线程,target指定执行操作的函数,args为函数传参
-
t = threading.Thread(target=super_player, args=(file, time))
-
-
# 将线程添加到线程列表
-
threads.append(t)
-
-
# 一个循环开起线程列表中的所有线程
-
for t_out in threads:
-
-
# 将线程设置为守护线程,当主线程执行完毕,子线程也跟着销毁(也可不设)
-
t_out.setDaemon(True)
-
-
# 开启线程
-
t_out.start()
-
-
# 阻碍主线程,直到子线程执行完毕
-
t_out.join()
-
-
print("end thread %s" % ctime())
运行结果:
This play 往后余生.mp3. time: 3 accrount_time: Fri Nov 2 18:22:10 2018
This play 肖申克的救赎.mp4. time: 5 accrount_time: Fri Nov 2 18:22:10 2018
This play 这个杀手不太冷.mp4. time: 4 accrount_time: Fri Nov 2 18:22:10 2018
This play 往后余生.mp3. time: 3 accrount_time: Fri Nov 2 18:22:13 2018
This play 这个杀手不太冷.mp4. time: 4 accrount_time: Fri Nov 2 18:22:14 2018
This play 肖申克的救赎.mp4. time: 5 accrount_time: Fri Nov 2 18:22:15 2018
end thread Fri Nov 2 18:22:18 2018
可以看到三个任务的线程同时在18:22:10 2018开启,第一个执行3秒结束,第二个执行4秒结束,第三个执行5秒结束。
主线程在执行8秒后结束。如果是单个线程执行的话,至少主线程结束所用时间是:3+4+5=12秒。可以看出多个线程执行可以大大提高执行任务的效率。而且你可以将第一个任务和第二个任务的时间同样改为5秒,主线程结束的时间为10秒,同样也没有超过12秒,然鹅单个线程就蛋疼了。
文章来源: blog.csdn.net,作者:橙子园,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/Chenftli/article/details/83659295
- 点赞
- 收藏
- 关注作者
评论(0)