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,threading,线程,enumerate,print,多任务 来源: https://www.cnblogs.com/xhlqss/p/15695659.html