本文对不使用线程和使用线程做了一个对比。
假设有两件事情:听歌、看电影
一、不用线程
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