zoukankan      html  css  js  c++  java
  • python 多线程笔记(1)-- 概念

    本文对不使用线程和使用线程做了一个对比。

    假设有两件事情:听歌、看电影

    一、不用线程

    import time
    
    songs = ['爱情买卖','朋友','回家过年','好日子']
    movies = ['阿凡达','猩球崛起']
    
    def music(songs):
        for s in songs:
            print("开始听歌曲:%s 	-- %s" %(s, time.ctime()))
            time.sleep(3)
    
    def movie(movies):
        for m in movies:
            print("开始看电影:%s 	-- %s" %(m, time.ctime()))
            time.sleep(5)
    
    
    if __name__ == '__main__':
        # 直接
        start = time.clock()
    
        music(songs)
        movie(movies)
    
        print("全部结束,耗时:{:.2f}".format(time.clock() - start))

    运行效果图:

    我们来计算一下时间:

      歌曲:4 * 3 = 12 秒

      电影:2 * 5 = 10 秒

      合计: 22 秒 (方法:累加)

    二、使用线程

    开两个线程,一个听歌,一个看电影

    import threading
    import time
    
    songs = ['爱情买卖','朋友','回家过年','好日子']
    movies = ['阿凡达','猩球崛起']
    
    def music(songs):
        for s in songs:
            print("开始听歌曲:%s 	-- %s" %(s, time.ctime()))
            time.sleep(3)
    
    def movie(movies):
        for m in movies:
            print("开始看电影:%s 	-- %s" %(m, time.ctime()))
            time.sleep(5)
    
    
    if __name__ == '__main__':
        
        start = time.clock()
        
        # 创建线程
        t1 = threading.Thread(target=music, args=(songs,))  # 听歌
        t2 = threading.Thread(target=movie, args=(movies,)) # 看电影
        
        # 启动所有线程
        for t in [t1, t2]:
            t.setDaemon(True) # 守护线程
            t.start()
            #t.join() 不要这样
        #t.join() 也不要这样
        
        # 阻塞主线程,直到所有子线程退出
        for t in [t1, t2]:
            t.join()
        
        print("全部线程结束,耗时:{:.2f}".format(time.clock() - start))

    运行效果图:

    我们来计算一下时间:

      歌曲:4 * 3 = 12 秒

      电影:2 * 5 = 10 秒

      合计:12  秒(方法:取最大值)

     三、如果没有 t.join(),则线程进入后台静默运行!

    import threading
    import time
    
    songs = ['爱情买卖','朋友','回家过年','好日子']
    movies = ['阿凡达','猩球崛起']
    
    def music(songs):
        for s in songs:
            print("开始听歌曲:%s 	-- %s" %(s, time.ctime()))
            time.sleep(3)
    
    def movie(movies):
        for m in movies:
            print("开始看电影:%s 	-- %s" %(m, time.ctime()))
            time.sleep(5)
    
    
    if __name__ == '__main__':
    
        start = time.clock()
        
        # 创建线程
        t1 = threading.Thread(target=music, args=(songs,))
        t2 = threading.Thread(target=movie, args=(movies,))
        
        # 启动所有线程
        for t in [t1, t2]:
            t.setDaemon(True) # 守护线程
            t.start()
        
        # 阻塞主线程,直到所有子线程退出,若没有,则进入后台静默运行
        #for t in [t1, t2]:
        #    t.join()
        
        print("全部线程结束,耗时:{:.2f}".format(time.clock() - start))

    运行效果图:

  • 相关阅读:
    Android application context/activity context与内存泄露(转)
    Android Slide Menu相关
    android 实现自定义卫星菜单
    关于引用Theme.AppCompat theme的报错问题
    java中volatile关键字的含义
    自定义控件其实很简单1/3
    Android 修改应用程序字体
    Android字体工作原理
    颜色渐变的算法
    Android系统下载管理DownloadManager功能介绍及使用示例
  • 原文地址:https://www.cnblogs.com/hhh5460/p/5178088.html
Copyright © 2011-2022 走看看