python 多线程笔记(1)-- 概念
本文对不使用线程和使用线程做了一个对比。
假设有两件事情:听歌、看电影
一、不用线程
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)-- 概念的更多相关文章
- Python多线程笔记(三),queue模块
尽管在Python中可以使用各种锁和同步原语的组合编写非常传统的多线程程序,但有一种首推的编程方式要优于其他所有编程方式即将多线程程序组织为多个独立人物的集合,这些任务之间通过消息队列进行通信 que ...
- Python多线程笔记(一)
Python中使用threading模块来实现多线程 threading提供一些常用的方法 threading.currentThread() 返回当前的线程变量 threading.enumerat ...
- python 多线程笔记(5)-- 生产者/消费者模式
我们已经知道,对公共资源进行互斥访问,可以使用Lock上锁,或者使用RLock去重入锁. 但是这些都只是方便于处理简单的同步现象,我们甚至还不能很合理的去解决使用Lock锁带来的死锁问题. 要解决更复 ...
- python 多线程 笔记(一)
#coding=utf-8 import threading from time import sleep, ctime loops = [4,2] def loop(nloop, nsec): pr ...
- python 多线程笔记(6)-- 闭包
在类里弄一个闭包出来 很多资料上说,类内部的变量有两种. 按定义所在的位置,分__init__上方的和__init__下方的 按内存所在的位置,分类的和实例的,或者说公共的和私有的 现在,我想在类里定 ...
- python 多线程笔记(6)-- 生产者/消费者模式(续)
用 threading.Event() 也可以实现生产者/消费者模式 (自己拍脑袋想出来的,无法知道其正确性,请大神告知为谢!) import threading import time import ...
- python 多线程笔记(4)-- 车站售票模拟
import threading import time import random class Worker(threading.Thread): '''售票员''' def __init__(se ...
- python 多线程笔记(3)-- 线程的私有命名空间
线程的私有命名空间实现: threading_namespace = threading.local() import threading import time import random thre ...
- python 多线程笔记(2)-- 锁
锁是什么?什么场合使用锁? 锁是一种机制,用于保护那些会引起冲突的资源. 比如上厕所,进去之后第一件事干嘛?把厕所门反锁!表示什么呢?表示这个厕所正在使用中! 至于在厕所里面干大事.干小事.还是打飞机 ...
随机推荐
- JS实现图片上传之前先预览
<html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat=&quo ...
- 基于LNMP的小米电子商务网站平台
项目参考:http://www.cnblogs.com/along21/p/7822228.html 基于LNMP的小米电子商务网站平台 1.环境 setenforce 0 #关闭selinux sy ...
- Semtech 的 137-1050 MHz 超低功耗长距离收发器(SX1276 Long Range Transceiver)
SX1276 收发器采用 LoRa? 长距离调制解调器,可实现超长距离扩频通信和高抗干扰能力,并将电流消耗降至最低.凭借 Semtech 专利的 LoRa 调制技术,SX1276 使用低成本晶体和物料 ...
- BigDecimal.setScale用法总结
1. BigDecimal num1 = new BigDecimal(2.225667);//这种写法不允许,会造成精度损失 2. BigDecimal num2 = new BigDecimal( ...
- 简单说明一下JS中的函数声明存在的“先使用,后定义”
首先看一段JS代码,其中使用了两种方式声明了两个函数,分别在不同的地方调用两个函数: <script> 'use strict'; // 输出hello函数 console.log(hel ...
- centos安装GD库失败
Error: Package: php-gd-5.6.11-1.el6.remi.x86_64 (remi-php56) Requires: gd-last(x86-64) >= 2.1.1 E ...
- javascript之promise
js语言的执行环境是"单线程",即一次只能执行一个任务,如果有多个任务的话,就需要排队,只有前面的一个任务执行结束了,再执行后面的一个任务.于是异步执行就变得非常重要,异步执行之后 ...
- .gitignore设置不生效
.gitignore git中,如果想要让git忽略某些文件,或不想push到远程库,不让其受版本的控制.可以使用git提供的.gitignore文件进行配置.像这样: 一般情况下,在文件还未修改前, ...
- A - Chess Placing CodeForces - 985A
You are given a chessboard of size 1 × n. It is guaranteed that n is even. The chessboard is painted ...
- [HAOI2015]树上操作(树链剖分,线段树)
题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a .操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 ...