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

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

一、不用线程

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

运行效果图:

python 多线程笔记(1)-- 概念的更多相关文章

  1. Python多线程笔记(三),queue模块

    尽管在Python中可以使用各种锁和同步原语的组合编写非常传统的多线程程序,但有一种首推的编程方式要优于其他所有编程方式即将多线程程序组织为多个独立人物的集合,这些任务之间通过消息队列进行通信 que ...

  2. Python多线程笔记(一)

    Python中使用threading模块来实现多线程 threading提供一些常用的方法 threading.currentThread() 返回当前的线程变量 threading.enumerat ...

  3. python 多线程笔记(5)-- 生产者/消费者模式

    我们已经知道,对公共资源进行互斥访问,可以使用Lock上锁,或者使用RLock去重入锁. 但是这些都只是方便于处理简单的同步现象,我们甚至还不能很合理的去解决使用Lock锁带来的死锁问题. 要解决更复 ...

  4. python 多线程 笔记(一)

    #coding=utf-8 import threading from time import sleep, ctime loops = [4,2] def loop(nloop, nsec): pr ...

  5. python 多线程笔记(6)-- 闭包

    在类里弄一个闭包出来 很多资料上说,类内部的变量有两种. 按定义所在的位置,分__init__上方的和__init__下方的 按内存所在的位置,分类的和实例的,或者说公共的和私有的 现在,我想在类里定 ...

  6. python 多线程笔记(6)-- 生产者/消费者模式(续)

    用 threading.Event() 也可以实现生产者/消费者模式 (自己拍脑袋想出来的,无法知道其正确性,请大神告知为谢!) import threading import time import ...

  7. python 多线程笔记(4)-- 车站售票模拟

    import threading import time import random class Worker(threading.Thread): '''售票员''' def __init__(se ...

  8. python 多线程笔记(3)-- 线程的私有命名空间

    线程的私有命名空间实现: threading_namespace = threading.local() import threading import time import random thre ...

  9. python 多线程笔记(2)-- 锁

    锁是什么?什么场合使用锁? 锁是一种机制,用于保护那些会引起冲突的资源. 比如上厕所,进去之后第一件事干嘛?把厕所门反锁!表示什么呢?表示这个厕所正在使用中! 至于在厕所里面干大事.干小事.还是打飞机 ...

随机推荐

  1. jQueryeasyUI+Hibernate+struts2实现商城后台管理之复合类别

    一.在Category.java中添加父类别和子类别两个变量,并生成get/set方法

  2. 【2】【MOOC】Python游戏开发入门-北京理工大学【第三部分-游戏开发之机制(屏幕绘制机制)】

    学习地址链接:http://www.icourse163.org/course/0809BIT021E-1001873001?utm_campaign=share&utm_medium=and ...

  3. Protocols, Generics, and Existential Containers — Wait What?

    For the longest time now, I thought that the two functions above were the same. But in actuality, wh ...

  4. 为什么 Category 不能增加成员变量-nonfragile

    三.既然是 non-fragile ivars,为什么 Category 不能增加成员变量?     看过一些资料,理由并不是很让人信服.我觉得并不是做不到,只是现在没有做,现在不支持.我在 Opti ...

  5. Odoo中的模型在哪里

    Odoo 模型存在 Python 的模块之外, 在中间注册表那里. 对于这个注册表,可以通过self.env[<model name>]进入,例如, 通过res.partner 模型获取对 ...

  6. Android绘图机制和处理技巧

    色彩特效处理 在色彩处理中,使用以下三个角度来描述一个图像. 色调: 物体传播的颜色 饱和度: 颜色的纯度, 从0(灰)到100%(饱和)来进行描述 亮度: 颜色的相对明暗程度 在Android中, ...

  7. Java泛型 PECS(Producer Extends, Consumer Super)

    本文转载自ImportNew,原文链接 Java 泛型: 什么是PECS(Producer Extends, Consumer Super) PECS指“Producer Extends,Consum ...

  8. 【luogu P1558 色板游戏】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1558 我知道三十棵线段树很暴力,可是我们可以状压啊. 颜色最多30,不会爆int 另外 吐槽评测机 #inc ...

  9. HDU 1142 A Walk Through the Forest(最短路+记忆化搜索)

    A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...

  10. AutoMapper 帮助类

    AutoMapper帮助类 /// <summary> /// AutoMapper帮助类 /// </summary> public static class AutoMap ...