02-多任务-thread
多任务-Thread
一、理解并行与并发
并行:cpu数多于任务数
例如:
一共有三个任务,分别是:QQ、微信、陌陌;一共有四个CPU,每个任务占据一个CPU。
并发:CPU数少于任务数
例如:
一共有三个任务,但是只有两个CPU,两个CPU去执行三个任务,这样CPU只能是一会儿执行A,一会儿执行B,一会儿在执行C。给每一个任务分配的时间都比较少,但是转换速度比较快,给人的感觉就像是同时执行这几个任务。
二、代码实现简单的并发
import threading
import time def sing():
for i in range(5):
print("*"*100)
print("正在唱歌")
time.sleep(0.5) def dance():
for i in range(5):
print("*"*100)
print("正在跳舞")
time.sleep(0.5) if __name__ == "__main__":
sing()
dance()
代码执行效果如下:
很显然上面的代码并不能达到咱们的目的,它还是sing()函数执行完成之后,采取执行dance()函数的。下面的代码是经过修改的代码,这个代码导入了threading模块并使用,所以可以实现并发的目的。
1 import threading
2 import time
3
4
5 def sing():
6 for i in range(5):
7 print("*"*100)
8 print("正在唱歌")
9 time.sleep(0.5)
10
11
12 def dance():
13 for i in range(5):
14 print("*"*100)
15 print("正在跳舞")
16 time.sleep(0.5)
17
18
19 if __name__ == "__main__":
20 t1 = threading.Thread(target = sing)
21 t2 = threading.Thread(target = dance)
22 t1.start()
23 t2.start()
代码执行效果如下:
三、查看线程数量
threading.enumerate() # 获取程序中的所有线程
四、对代码的解释
1.使用threading.Thread()创建一个对象,这个时候并没有从创建一个线程,只有当这个对象调用start()的时候才开始创建一个线程。调用start()函数的时候也是运行线程的时候。
2.几乎同一时间创建许多线程,这些线程并不会同时执行,执行顺序也不确定
五、 补充:
一、 关于enumerate()的那点事:
语法:
enumerate(sequence, [start=0])
'''
sequence------> 一个序列、迭代器或其他支持迭代对象。
start -- 下标起始位置。
'''
1.enumerate()的用法一-------》只使用一个参数
enumerate(可迭代对象) # 这样的话会返回一个十六进制的内存地址,如下图所示:
list(enumerate(可迭代的对象)) # 会返回一个数组,这个数组既包含元素索引,又包含可迭代对象中的元素
2.enumerate(可迭代的对象, 索引)--------》两个参数
enumerate(可迭代的对象, 索引)-------》返回指定索引处对应值的内存地址
list(enumerate(可迭代的对象, 起始索引))-------》返回从指定索引处开始的索引值以及对应的值
具体效果如下图所示:
3.enumerate配合for循环使用
二、十六进制与二进制之间的转换
可以使用函数hex()。
注意:十六进制的数是以0x开头的
三、如何查看内存地址
可以使用python内置函数id(),会返回一个十进制的内存地址。
02-多任务-thread的更多相关文章
- 多线程02.继承Thread类
package chapter2; /** * 1.使用static虽然完成了当前的功能. * 但是static的生命周期比较长,需要在所有线程执行完成后才会结束. * 还有号没有按照顺序进行打印 * ...
- python就业班-淘宝-目录.txt
卷 TOSHIBA EXT 的文件夹 PATH 列表卷序列号为 AE86-8E8DF:.│ python就业班-淘宝-目录.txt│ ├─01 网络编程│ ├─01-基本概念│ │ 01-网络通信概述 ...
- 【实战Java高并发程序设计 2】无锁的对象引用:AtomicReference
AtomicReference和AtomicInteger非常类似,不同之处就在于AtomicInteger是对整数的封装,而AtomicReference则对应普通的对象引用.也就是它可以保证你在修 ...
- 深度解析Java8 – AbstractQueuedSynchronizer的实现分析(上)
本文首发在infoQ :www.infoq.com/cn/articles/jdk1.8-abstractqueuedsynchronizer 前言: Java中的FutureTask作为可异步执行任 ...
- Java多线程系列--“JUC锁”05之 非公平锁
概要 前面两章分析了"公平锁的获取和释放机制",这一章开始对“非公平锁”的获取锁/释放锁的过程进行分析.内容包括:参考代码获取非公平锁(基于JDK1.7.0_40)释放非公平锁(基 ...
- async await的前世今生
async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了.但是这也给我们编程埋下了一些隐 ...
- Java:ConcurrentHashMap的锁分段技术
术语定义 术语 英文 解释 哈希算法 hash algorithm 是一种将任意内容的输入转换成相同长度输出的加密方式,其输出被称为哈希值. 哈希表 hash table 根据设定的哈希函数H(ke ...
- Java多线程(二)——常用的实现多线程的两种方式
一.继承Thread类创建线程类 Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例.每个线程的作用是完成一定的任务,实际上就是执行一段程序流即一段顺序执行的代码. ...
- Java多线程学习(二)---线程创建方式
线程创建方式 摘要: 1. 通过继承Thread类来创建并启动多线程的方式 2. 通过实现Runnable接口来创建并启动线程的方式 3. 通过实现Callable接口来创建并启动线程的方式 4. 总 ...
随机推荐
- Python 注释和键盘输入,输出数据格式化
Python中的注释有单行注释和多行注释: Python中单行注释以 # 开头,例如: # 这是一个注释 print("Hello, World!") 多行注释用三个单引号 ''' ...
- docker 配置redis并远程访问
我安装的是这个镜像 docker.io/redis docker pull docker mkdir docker cd docker mkdir redis cd redis mkdir data ...
- nohup使用
nohup:不挂断运行 在忽略挂起信号的情况下运行给定的命令,以便在注销后命令可以在后台继续运行. 可以这么理解:不挂断的运行,注意并没有后台运行的功能,就是指,用nohup 运行命令可以是命令永远运 ...
- Macbookpro vim操作键说明
i → Insert 模式,按 ESC 回到 Normal 模式. x → 删当前光标所在的一个字符.:wq → 存盘 + 退出 (:w 存盘, :q 退出) (陈皓注::w 后可以跟文件名)dd → ...
- C语言 文本字符串存入二维数组
字符串存入数组 文本内容: line1_1 line1_2line2_1 line2_2line3_1 line3_2line4_1 line4_2line5_1 line5_2line6_1 lin ...
- jmeter非GUI(cmd命令行)模式的压测和输出测试报告
1.非GUI模式的压测,和GUI有啥不同? 2.非GUI模式怎么搞? 大家打开jmeter的时候,都会看到这个界面: 注意看这句话: Don't use GUI mode for load testi ...
- javaSE高级篇2 — 流技术 — 更新完毕
1.先认识一个类----File类 前言:IO相关的一些常识 I / O----输入输出 I 输入 input 0 输出 output I / o 按数据的流动方向来分- ...
- Navicat连接Linux系统下的Mysql数据库
1 . 进入Linux机器 , 登录并进入mysql如果没有安装mysql,参照 https://blog.csdn.net/weixin_35353187/article/details/81712 ...
- 学习java的第二十一天
一.今日收获 1.java完全学习手册第三章算法的3.2排序,比较了跟c语言排序上的不同 2.观看哔哩哔哩上的教学视频 二.今日问题 1.快速排序法的运行调试多次 2.哔哩哔哩教学视频的一些术语不太理 ...
- 基于树莓派部署 code-server
code-server 是 vscode 的服务端程序,通过部署 code-server 在服务器,可以实现 web 端访问 vscode.进而可以达到以下能力: 支持跨设备(Mac/iPad/iPh ...