python线程:threading

举报
橙子园 发表于 2022/05/25 23:07:21 2022/05/25
【摘要】 线程的概念:简单理解就是操作系统对cup资源的分配调度 下面用实例来讲一下threading的用法: 我们假设你想听歌、看电影来度过愉快的周末,以前的操作系统都是单个处理任务,但是现在cpu,你可以同时做很多种事情。 直接上代码,代码上看注释 import threadingfrom time import ctime, sle...

线程的概念:简单理解就是操作系统对cup资源的分配调度

下面用实例来讲一下threading的用法:

我们假设你想听歌、看电影来度过愉快的周末,以前的操作系统都是单个处理任务,但是现在cpu,你可以同时做很多种事情。

直接上代码,代码上看注释


  
  1. import threading
  2. from time import ctime, sleep
  3. # 听歌、看电影可以在一个播放器下进行,我们要传入文件、播放时间
  4. def super_player(file, time):
  5. # 这个循环可以设置每个文件的播放次数
  6. for i in range(2):
  7. # 打印出播放的是什么文件、时长、当前时间
  8. print("This play %s. time: %s accrount_time: %s" % (file, time, ctime()))
  9. sleep(time)
  10. if __name__ == '__main__':
  11. # 用一个字典来放你想要操作的任务
  12. play_dict = {
  13. '往后余生.mp3': 3,
  14. '肖申克的救赎.mp4': 5,
  15. '这个杀手不太冷.mp4': 4,
  16. }
  17. # 弄一个线程列表放所开的线程
  18. threads = []
  19. # 来个循环开多个线程执行你要操作的任务
  20. for file, time in play_dict.items():
  21. # 为所需要的任务,开一个线程,target指定执行操作的函数,args为函数传参
  22. t = threading.Thread(target=super_player, args=(file, time))
  23. # 将线程添加到线程列表
  24. threads.append(t)
  25. # 一个循环开起线程列表中的所有线程
  26. for t_out in threads:
  27. # 将线程设置为守护线程,当主线程执行完毕,子线程也跟着销毁(也可不设)
  28. t_out.setDaemon(True)
  29. # 开启线程
  30. t_out.start()
  31. # 阻碍主线程,直到子线程执行完毕
  32. t_out.join()
  33. 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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。