博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 多线程笔记(1)-- 概念
阅读量:5872 次
发布时间:2019-06-19

本文共 2214 字,大约阅读时间需要 7 分钟。

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

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

一、不用线程

import timesongs = ['爱情买卖','朋友','回家过年','好日子']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 threadingimport timesongs = ['爱情买卖','朋友','回家过年','好日子']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 threadingimport timesongs = ['爱情买卖','朋友','回家过年','好日子']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))

运行效果图:

本文转自罗兵博客园博客,原文链接:http://www.cnblogs.com/hhh5460/p/5178088.html
,如需转载请自行联系原作者
你可能感兴趣的文章
socket和http间的区别
查看>>
error笔记
查看>>
C++——流类库和输入/输出
查看>>
Windows下动态库的制作与使用
查看>>
STL容器简介
查看>>
会写"helloworld",不等于入门
查看>>
element-ui table多选CheckBox参数解析
查看>>
重置mysql的root用户密码
查看>>
隔离级别
查看>>
选项卡实现
查看>>
翻译:理解TCP/IP网络栈&编写网络应用(上)
查看>>
算法导论6:排序小结和最值取法 2016.1.6
查看>>
Delphi线程类(四)
查看>>
使用skin++进行MFC界面美化范例
查看>>
使用httpwatch抓包
查看>>
LeetCode - Best Time to Buy and Sell
查看>>
cross validation交叉验证
查看>>
<、>&、<& 重定向符
查看>>
PHP json_encode 文本形式数字下标数组导致下标丢失
查看>>
【Java】字节流-从文件输入,输出到文件
查看>>