其他分享
首页 > 其他分享> > 02-多任务-thread

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