• python 多线程


    进程:计算机程序是磁盘中可执行的二进制或其他类型数据。他们只有在被读取到内存中、被操作系统调用的时候才开始它们的生命周期。进程是程序的一次执行,每个进程都有自己的地址空间、内存、数据栈,以及其他记录其运行轨迹的辅助数据。操作系统管理在其上面运行的所有进程,并为这些进程公平的分配时间。
    线程:所有的线程都运行在同一个进程中,共享相同的运行环境。

    1.单线程与多进程

    避免使用thread模块,原因是thread不支持守护进程。当主进程退出时,所有的子线程不管他们是否在工作,都会被强行退出。threading模块支持守护线程。

    from time import ctime,sleep,time
    import threading
    def music(list):
        for i in list:
            print("I was listening to %s! %s"%(i,ctime()))
            sleep(2)
    def movie(m,loop):
        for i in range(loop):
            print("I was at the %s! %s" % (m, ctime()))
            sleep(5)
    
    if __name__=="__main__":
        start=time()
        music(["寂静之声","一生何求"])
        movie("阿甘正传",2)
        end=time()
        used_time = int(end-start)
        print("Time consuming: %s seconds" % used_time)
    
    from time import ctime,sleep,time
    import threading
    def music(list):
        for i in list:
            print("I was listening to %s! %s"%(i,ctime()))
            sleep(2)
    def movie(m,loop):
        for i in range(loop):
            print("I was at the %s! %s" % (m, ctime()))
            sleep(5)
    theads=[]
    t1=threading.Thread(target=music,args=(["寂静之声","一生何求"],))
    theads.append(t1)
    t2=threading.Thread(target=movie,args=("阿甘正传",2))
    theads.append(t2)
    if __name__=="__main__":
        start=time()
        for i in theads:
            i.start()
        for i in theads:
            i.join()
        end=time()
        used_time = int(end-start)
        print("Time consuming: %s seconds" % used_time)
    

    2.自定义线程类

    from time import ctime,sleep,time
    import threading
    class MyThread(threading.Thread):
        def __init__(self, func, args, name=''):
            threading.Thread.__init__(self)
            self.func = func
            self.args = args
            self.name = name
        def run(self):
            self.func(*self.args)
    def super_play(file_, t):
        for i in range(2):
            print("Start playding: %s! %s"% (file_,ctime()))
            sleep(t)
    lists={"天边.mp3":3,"廊桥遗梦.rmvb":5,"壮志凌云。avi":4}
    lists_len = range(len(lists))
    threads = []
    for file,t in lists.items():
        t = MyThread(super_play,(file,t),super_play.__name__)
        threads.append(t)
    if __name__=="__main__":
        start = time()
        for i in lists_len:
            threads[i].start()
        for i in lists_len:
            threads[i].join()
        end = time()
        ge = round((end-start),1)
        print("共耗时%s秒"%ge)
    

    扩展:关于__name__

    class TestName():
        def func1(self):
            print("执行func1")
        print("func1.__name__:",func1.__name__)
        def func2(self):
            print("执行func2")
        print("func2.__name__:",func2.__name__)
    if __name__=="__main__":
        print("TestName.__name__:",TestName.__name__)
        print("py文件__name__:", __name__)
    
  • 相关阅读:
    C++开发系列-友元函数 友元类
    C++开发系列-C语言的malloc与C++的new分配空间
    C++开发系列-内联函数
    iOS开发系列-Foundation与CoreFoundation内存管理
    C开发系列-字符串
    C开发系列-数组
    列表 元组 字典
    神奇的print
    while 语句的逻辑
    <Web Crawler><Java><thread-safe queue>
  • 原文地址:https://www.cnblogs.com/csj2018/p/10052212.html
Copyright © 2020-2023  润新知