多线程
什么是线程 :是真正的执行单位
线程不能单独存在 必须存在于进程中,
进程是一个资源单位,其包含了运行程序所需的所有资源
没有线程,进程中的资源无法被利用起来,所以一个进程至少包含一个线程,称之为主线程
当我们启动一个程序时,操作系统就会自己为这个程序创建一个主线程
线程可以由程序后期开启 ,自己开启线程称之为子线程
为什么需要线程:
它的目的只有一个就是提高效率,
因为在是在进程中,只有一个线程的话效率很低,多个线程就可以完成更多的工作,
还有一个原因就是,在创建多个进程来完成的话,就会及其的消耗资源
如何使用创建线程:
两种方法
一个使用Threading 类中的Thread 创建线程
第二个方法是继承Thread这个类覆盖run方法创建线程,这个和进程的创建是差不多的
实例:第一种方法
from threading import Thread,current_thread import time def task(): print("2",current_thread()) print("子线程running") time.sleep(10) print("子线程over") # 使用方法一 直接实例化Thread类 if __name__ == '__main__': t = Thread(target=task) t.start() # task() # 执行顺序不固定 如果开启线程速度足够快 可能子线程先执行 print("主线程over") print("1",current_thread())
实例:第二种方法
# 使用方法二 继承Thread 覆盖run方法 class MyThread(Thread): def run(self): print("子线程run!") m = MyThread() print("主线over") # 使用方法和多进程一模一样 开启线程的代码可以放在任何位置 开启进程必须放在判断下面
线程的几个特点:
1 开启线程不消耗资源,运行速度比叫进程要快
2 在开启多个子线程后,线程之间的数据是共享的,所以就不存在什么进程中的queue和Manager
3 线程中是没有父子级的,都是相同的pid不存在谁要先执行,后执行的,都是通过自己抢占的,就算是有父子级,都是自己设置的
守护线程:
守护线程是和进程中的守护进程是一样的,就是被守护的线程如果死掉的话,那么守护线程也会随着死掉
JoinAbleQueue
这是一个