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

我听完歌就去敲代码:

#! /usr/bin/env python
#coding=utf-8 import time def matter1(music):
print("我想听这些歌") for i in range(0,len(music)):
print("第" + str(i + 1) + "首歌是:" + str(music[i])) #当前时间
print(time.strftime('%Y%H%M%S',time.localtime()))
#假设每一首歌曲的时间是2秒
time.sleep(2)
print("切换下一首歌...") def matter2(number):
print("我在敲代码") j = 0
while j < number:
print("我准备写入第" + str(j +1) + "行代码")
j = j + 1
#当前时间
print(time.strftime('%Y%H%M%S',time.localtime()))
#假设每写一行代码的时间为1s
time.sleep(1)
print("写下一行代码...") if __name__ == '__main__': start = time.time() #设定我要听的个为
music = ['music1','music2','music3']
#开始听歌
matter1(music) #设定敲代码的行数
number = 5
#开始敲代码
matter2(number) end = time.time()
print("完成的时间:",str(end - start))

结果:

完成的时间: 11.00062894821167

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

#! /usr/bin/env python
#coding=utf-8 import time
import threading def matter1(music):
print("我想听歌!!!") for i in range(0,len(music)):
print("第" + str(i+1) + "首歌是:" + str(music[i])) #当前时间是
print(time.strftime('%Y%H%M%S',time.localtime())) #假设每一首歌曲的时间是2s
time.sleep(2) print("切换下一首歌...") def matter2(number):
print("我在敲代码!!!") j = 0
while j < number:
print("我准备写入第" + str(j+1) + "行代码")
j = j+1 #当前时间是
print(time.strftime('%Y%H%M%S',time.localtime())) #假设每写一行代码的时间为1s
time.sleep(1) print("写下一行代码...") if __name__ == '__main__':
#设定我要听的歌为
music = ["music1","music2","music3"] #设定我要敲代码的行数
number = 5 threads = [] thing1 = threading.Thread(target=matter1,args=(music,))
threads.append(thing1) thing2 = threading.Thread(target=matter2,args=(number,))
threads.append(thing2) #开始时间
startTime = time.time() #写个for让两件事情都进行
for thing in threads:
#setDaemon为主线程启动了线程matter1和matter2
#启动也就是相当于执行了这个for循环
thing.setDaemon(True)
thing.start() #为了防止子线程还没结束主线程就结束的意外情况,在程序里面加个join
#子进程没结束前,主线程会被卡在这里
thing1.join()
thing2.join() #结束时间
endTime = time.time()
print("完成的时间为:",str(endTime-startTime))

结果:

完成的时间为: 6.000343084335327

封装成类的形式

#! /usr/bin/env python
#coding=utf-8 import time
import threading class MyThread(threading.Thread):
def __init__(self,func,args,name=''):
threading.Thread.__init__(self)
self.name = name
self.func = func
self.args = args def run(self):
#某某线程要开始了
print(self.name + "开始了#######") if self.name == "听歌线程":
matter1(music)
elif self.name == "打码线程":
matter2(number)
print(self.name + "结束了########") def matter1(music):
for i in range(0,len(music)):
print("第" + str(i+1) + "首歌是:" + str(music[i]))
#假设每一首歌曲的时间是2s
time.sleep(2)
print("切换下一首歌...") def matter2(number):
j = 0
while j < number:
print("我准备写入第" + str(j+1) + "行代码")
j = j+1
#假设每一行代码的时间为1s
time.sleep(1)
print("写下一行代码...") if __name__ == '__main__':
#设定我要听的歌曲为
music = ['music1','music2','music3'] #设定我要打码的行数
number = 5 #开始时间
start = time.time() thing1 = MyThread(matter1,music,"听歌线程")
thing2 = MyThread(matter2,number,"打码线程") thing1.start()
thing2.start() thing1.join()
thing2.join() #结束时间
end = time.time()
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. tigervnc环境搭建

    在root用户下执行以下操作: 1.安装tigervnc yum install tigervnc tigervnc-server 2.配置tigervnc 编辑vncservers文件,执行如下命令 ...

  2. Ueditor编辑器图片上传到万象优图

    最近想用typecho做一个个人博客站,typecho的文本编辑器不能上传图片,我就用Ueditor替换的了原来的文本编辑器,听说腾讯的万象优图每月有50G的免费空间和流量,我就自己改了下Uedito ...

  3. hdu4847:Wow! Such Doge!(字符串匹配)

    题目:hdu4847:Wow! Such Doge! 题目大意:在给出的段落里面找出"doge"出现的次数.大写和小写都能够. 解题思路:字符串匹配问题,能够在之前将字母都转换成统 ...

  4. css3中font-face属性的用法详解

    @font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中,随着@font-face模块的出现,我们在Web的开发中使用字体不怕只能使用Web安全字体,你们当中或许有许 ...

  5. x^a=b(mod c)求解x在[0,c-1]上解的个数模板+原根求法

    /************************************* 求解x^a=b(mod c) x在[0,c-1]上解的个数模板 输入:1e9>=a,b>=1,1e9>= ...

  6. 简单记事本&Java

    目标: 学习java的IO流和文件的打开保存 内容: 使用javaSwing包里面的一些东西,比如按钮.菜单来进行布局 代码: package myNotePad; import java.awt.F ...

  7. MySql四种隔离级别

    什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事务的结束有 ...

  8. 怎样解决KEIL 5 编译KEIL4的带有RTX系统的project解决方法

        1.笔者个人对KEIL5与KEIL4的比較             相较于KEIL 5 的"华丽",笔者还是喜欢KEIL4的"内敛".主要也还是习惯了, ...

  9. 特性,批次特性建立的BAPI函數

    [转http://taijizhang.blog.163.com/blog/static/176071381201442225514453/] SAP特性,物料特性,批次特性建立的BAPI函數 类的T ...

  10. hive查询注意及优化tips

    Hive是将符合SQL语法的字符串解析生成可以在Hadoop上执行的MapReduce的工具.使用Hive尽量按照分布式计算的一些特点来设计sql,和传统关系型数据库有区别, 所以需要去掉原有关系型数 ...