python 多线程笔记(1)-- 概念

mac2022-06-30  96

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

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

一、不用线程

import time songs = ['爱情买卖','朋友','回家过年','好日子'] movies = ['阿凡达','猩球崛起'] def music(songs): for s in songs: print("开始听歌曲:%s \t-- %s" %(s, time.ctime())) time.sleep(3) def movie(movies): for m in movies: print("开始看电影:%s \t-- %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 \t-- %s" %(s, time.ctime())) time.sleep(3) def movie(movies): for m in movies: print("开始看电影:%s \t-- %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 \t-- %s" %(s, time.ctime())) time.sleep(3) def movie(movies): for m in movies: print("开始看电影:%s \t-- %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

最新回复(0)