python 解释性的编程语言 自上而下的执行代码,上一行的代码没有执行完毕,那么下一行的代码也不会被执行!
单任务模式下运行程序: 同一时刻只能做一件事情
import time
def play():
'''玩游戏'''
for i in range(3):
print('玩游戏 .....')
time.sleep(.5)
def network():
'''上网'''
for i in range(3):
print('上网.....')
time.sleep(.5)
#调用
#单任务的表现:当25行代码,play函数调用没有执行完毕之前。26行不会被执行,也就是会阻塞。。
play()
network()
能否多任务完成让两个函数一起被执行呢?
1、play()调用
2、network()调用
答案是肯定的,可以使用多线程来解决这个问题!
也可以通过任务管理器查看各个进程中的线程:单击所在的菜单行|右键|选择列|选择线程
进程:系统进行分配和管理资源的基本单位
线程:进程的一个执行单元,是进程内调度的实体、是CPU调度和分派的基本单位,是比进程更
小的独立运 行的基本单位。线程也被称为轻量级进程,线程是程序执行的最小单位。
import time
#导入线程
import threading
def play():
'''玩游戏'''
for i in range(3):
print('玩游戏 .....')
time.sleep(.5)
def network():
'''上网'''
for i in range(3):
print('上网.....')
time.sleep(.5)
#通过方法调用
def run():
#这个执行,是单任务
# play()
# network()
#下面执行的,是多任务
t1=threading.Thread(target=play) #创建线程对象,指定目标
t2=threading.Thread(target=network)#创建线程对象,指定目标
t1.start() #即可启动任务, 任务内容为创建对象时执行的部分(函数)
t2.start()
if __name__=='__main__':
run()
效果:
小结:
利用了threading模块Thread类去创建对象,这个称之为多线程
并行: 真的多任务
并发: 假的多任务
CPU: 运行电脑上的程序
QQ 微信 腾讯课堂
程序 程序 程序
任务 任务 任务
好像看上去,这三个程序是同时在运行的。
具体说明:
电脑:单核CPU,只有一个CPU,只有它在做事。
一个CPU:如果此时此刻在运行QQ,那么另外那些任务,程序其实没有在被运行 微信 腾讯课堂
1个CPU的情况下,我们也可以完成多任务=》QQ 微信 腾讯课堂 还可以被运行..
总之:python中利用threading多线程,完成多任务,是并发,并且是假的多任务。
Cpython解释器 > GIL 全局解释器锁 > 限制了python的多线程完成并行.