• python-多线程趣味


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

    我听完歌就去敲代码:

    #! /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

  • 相关阅读:
    asp.net中virtual和abstract的区别分析
    .NET中的Timer类型用法详解
    类型参数的约束(C# 编程指南)T
    SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
    jquery的$.extend和$.fn.extend作用及区别
    类型参数约束 : Controller where T : class,new()
    asp.net获取当前网址url的各种属性(文件名、参数、域名 等)的代码
    字符串一级指针的内存模型图(盲点,以前自己懵懂)
    字符串的基本操作,初始化和赋值之类的区别,和数据名是一个常量指针不可以改变和赋值(盲点众多)
    关于内存四区和指针的修改问题
  • 原文地址:https://www.cnblogs.com/R-bear/p/7724855.html
Copyright © 2020-2023  润新知