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))

运行效果图:

原文地址:https://www.cnblogs.com/hhh5460/p/5178088.html