假设一个程序员,想听歌,但是又想敲代码,于是又:

我听完歌就去敲代码:

  1. #! /usr/bin/env python
  2. #coding=utf-8
  3.  
  4. import time
  5.  
  6. def matter1(music):
  7. print("我想听这些歌")
  8.  
  9. for i in range(0,len(music)):
  10. print("第" + str(i + 1) + "首歌是:" + str(music[i]))
  11.  
  12. #当前时间
  13. print(time.strftime('%Y%H%M%S',time.localtime()))
  14. #假设每一首歌曲的时间是2秒
  15. time.sleep(2)
  16. print("切换下一首歌...")
  17.  
  18. def matter2(number):
  19. print("我在敲代码")
  20.  
  21. j = 0
  22. while j < number:
  23. print("我准备写入第" + str(j +1) + "行代码")
  24. j = j + 1
  25. #当前时间
  26. print(time.strftime('%Y%H%M%S',time.localtime()))
  27. #假设每写一行代码的时间为1s
  28. time.sleep(1)
  29. print("写下一行代码...")
  30.  
  31. if __name__ == '__main__':
  32.  
  33. start = time.time()
  34.  
  35. #设定我要听的个为
  36. music = ['music1','music2','music3']
  37. #开始听歌
  38. matter1(music)
  39.  
  40. #设定敲代码的行数
  41. number = 5
  42. #开始敲代码
  43. matter2(number)
  44.  
  45. end = time.time()
  46. print("完成的时间:",str(end - start))

结果:

完成的时间: 11.00062894821167

可以改成,一边敲代码一边听歌,那么设计一个多线程,可以让他们同时进行

  1. #! /usr/bin/env python
  2. #coding=utf-8
  3.  
  4. import time
  5. import threading
  6.  
  7. def matter1(music):
  8. print("我想听歌!!!")
  9.  
  10. for i in range(0,len(music)):
  11. print("第" + str(i+1) + "首歌是:" + str(music[i]))
  12.  
  13. #当前时间是
  14. print(time.strftime('%Y%H%M%S',time.localtime()))
  15.  
  16. #假设每一首歌曲的时间是2s
  17. time.sleep(2)
  18.  
  19. print("切换下一首歌...")
  20.  
  21. def matter2(number):
  22. print("我在敲代码!!!")
  23.  
  24. j = 0
  25. while j < number:
  26. print("我准备写入第" + str(j+1) + "行代码")
  27. j = j+1
  28.  
  29. #当前时间是
  30. print(time.strftime('%Y%H%M%S',time.localtime()))
  31.  
  32. #假设每写一行代码的时间为1s
  33. time.sleep(1)
  34.  
  35. print("写下一行代码...")
  36.  
  37. if __name__ == '__main__':
  38. #设定我要听的歌为
  39. music = ["music1","music2","music3"]
  40.  
  41. #设定我要敲代码的行数
  42. number = 5
  43.  
  44. threads = []
  45.  
  46. thing1 = threading.Thread(target=matter1,args=(music,))
  47. threads.append(thing1)
  48.  
  49. thing2 = threading.Thread(target=matter2,args=(number,))
  50. threads.append(thing2)
  51.  
  52. #开始时间
  53. startTime = time.time()
  54.  
  55. #写个for让两件事情都进行
  56. for thing in threads:
  57. #setDaemon为主线程启动了线程matter1和matter2
  58. #启动也就是相当于执行了这个for循环
  59. thing.setDaemon(True)
  60. thing.start()
  61.  
  62. #为了防止子线程还没结束主线程就结束的意外情况,在程序里面加个join
  63. #子进程没结束前,主线程会被卡在这里
  64. thing1.join()
  65. thing2.join()
  66.  
  67. #结束时间
  68. endTime = time.time()
  69. print("完成的时间为:",str(endTime-startTime))

结果:

完成的时间为: 6.000343084335327

封装成类的形式

  1. #! /usr/bin/env python
  2. #coding=utf-8
  3.  
  4. import time
  5. import threading
  6.  
  7. class MyThread(threading.Thread):
  8. def __init__(self,func,args,name=''):
  9. threading.Thread.__init__(self)
  10. self.name = name
  11. self.func = func
  12. self.args = args
  13.  
  14. def run(self):
  15. #某某线程要开始了
  16. print(self.name + "开始了#######")
  17.  
  18. if self.name == "听歌线程":
  19. matter1(music)
  20. elif self.name == "打码线程":
  21. matter2(number)
  22. print(self.name + "结束了########")
  23.  
  24. def matter1(music):
  25. for i in range(0,len(music)):
  26. print("第" + str(i+1) + "首歌是:" + str(music[i]))
  27. #假设每一首歌曲的时间是2s
  28. time.sleep(2)
  29. print("切换下一首歌...")
  30.  
  31. def matter2(number):
  32. j = 0
  33. while j < number:
  34. print("我准备写入第" + str(j+1) + "行代码")
  35. j = j+1
  36. #假设每一行代码的时间为1s
  37. time.sleep(1)
  38. print("写下一行代码...")
  39.  
  40. if __name__ == '__main__':
  41. #设定我要听的歌曲为
  42. music = ['music1','music2','music3']
  43.  
  44. #设定我要打码的行数
  45. number = 5
  46.  
  47. #开始时间
  48. start = time.time()
  49.  
  50. thing1 = MyThread(matter1,music,"听歌线程")
  51. thing2 = MyThread(matter2,number,"打码线程")
  52.  
  53. thing1.start()
  54. thing2.start()
  55.  
  56. thing1.join()
  57. thing2.join()
  58.  
  59. #结束时间
  60. end = time.time()
  61. print("完成的时间为:",str(end - start))

结果:

完成的时间为: 6.001343011856079

python-多线程趣味的更多相关文章

  1. python多线程学习记录

    1.多线程的创建 import threading t = t.theading.Thread(target, args--) t.SetDeamon(True)//设置为守护进程 t.start() ...

  2. python多线程编程

    Python多线程编程中常用方法: 1.join()方法:如果一个线程或者在函数执行的过程中调用另一个线程,并且希望待其完成操作后才能执行,那么在调用线程的时就可以使用被调线程的join方法join( ...

  3. Python 多线程教程:并发与并行

    转载于: https://my.oschina.net/leejun2005/blog/398826 在批评Python的讨论中,常常说起Python多线程是多么的难用.还有人对 global int ...

  4. python多线程

    python多线程有两种用法,一种是在函数中使用,一种是放在类中使用 1.在函数中使用 定义空的线程列表 threads=[] 创建线程 t=threading.Thread(target=函数名,a ...

  5. python 多线程就这么简单(转)

    多线程和多进程是什么自行google补脑 对于python 多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂.所以,这里力图用简单的例子,让你对多线程有个初步的认识. 单线程 在好些年前的 ...

  6. python 多线程就这么简单(续)

    之前讲了多线程的一篇博客,感觉讲的意犹未尽,其实,多线程非常有意思.因为我们在使用电脑的过程中无时无刻都在多进程和多线程.我们可以接着之前的例子继续讲.请先看我的上一篇博客. python 多线程就这 ...

  7. python多线程监控指定目录

    import win32file import tempfile import threading import win32con import os dirs=["C:\\WINDOWS\ ...

  8. python多线程ssh爆破

    python多线程ssh爆破 Python 0x01.About 爆弱口令时候写的一个python小脚本,主要功能是实现使用字典多线程爆破ssh,支持ip表导入,字典数据导入. 主要使用到的是pyth ...

  9. 【python,threading】python多线程

    使用多线程的方式 1.  函数式:使用threading模块threading.Thread(e.g target name parameters) import time,threading def ...

  10. <转>Python 多线程的单cpu与cpu上的多线程的区别

    你对Python 多线程有所了解的话.那么你对python 多线程在单cpu意义上的多线程与多cpu上的多线程有着本质的区别,如果你对Python 多线程的相关知识想有更多的了解,你就可以浏览我们的文 ...

随机推荐

  1. JS Map对象

    java和C#等高级语言中都有map这样的键值对,但是js里没有,我们需要这样的,该怎么做呢? 可以自己使用function封装一个map对象,如下所示 function Map() { this.k ...

  2. 查看vnc server的日志

    grep vnc /var/log/messages 转自: http://blog.csdn.net/denghua10/article/details/39107309

  3. android中实现毛笔效果(View 中画图)

    近期有一个项目设计一个APP实现通过触摸屏实现毛笔写字效果.传统的绘画板程序直接通过Path的moveTo和LineTo便可实现简单的线条绘画程序.然而要达到毛笔的笔锋效果则须要更为具体点的设计.我的 ...

  4. phpcms的基础知识和配置

    一.设置界面 1.站点设置:相当于服务器上的站点 (1)站点修改:“关键词”和“描述”的修改,便于网络优化和搜索引擎对本网站的搜索. (2)点击站点后边的修改,模板的修改,引用自己模板 2.基本设置: ...

  5. TP框架的增删改

    TP添加数据有三种方式 1. //1.使用数组添加 $n = M("nation"); $arr = array("Code"=>"n007&q ...

  6. 【BZOJ2401】陶陶的难题I 欧拉函数+线性筛

    [BZOJ2401]陶陶的难题I 题意:求,n<=1000000,T<=100000 题解:直接做是n*sqrt(n)的,显然会TLE,不过这题a和b都是循环到n,那么就可以进行如下的神奇 ...

  7. 成功扩展live555支持ipv6,同时支持RTSPServer & RTSPClient

    live555对ipv6的扩展 从live555的官网看live555的发展历史,实在是历史悠久,保守估计已经发展了至少16年以上了,同时,这也导致了live555在很多架构和考虑上面不能满足现代化的 ...

  8. Bootstrap 第一天

    Bootstrap第一天 1.什么是Bootstrap?     Bootstrap是由两位设计开发的.     Bootstrap主要是前端的框架(HTML.CSS.JS). 2.为什么使用Boot ...

  9. Python赋值魔法技巧

    实验环境: [root@localhost ~]# python -V Python 2.7.5 1.序列解包 多个赋值操作可以同时进行 >>> x,y,z = 1,2,3 > ...

  10. ubuntu配置jdk环境

    简单记录如下: 1. 下载JDK并解压后,复制到想要放置的目录,本文以“/usr/lib/jdk”为例: 2. 编辑配置文件,可以是“/etc/profile”或者“~/.bashrc”. 输入命令“ ...