day36,多线程,线程中的锁机制,joinablequeue

                                                                                  多线程

什么是线程 :是真正的执行单位

线程不能单独存在 必须存在于进程中,

进程是一个资源单位,其包含了运行程序所需的所有资源

线程才是真正的执行单位

没有线程,进程中的资源无法被利用起来,所以一个进程至少包含一个线程,称之为主线程

当我们启动一个程序时,操作系统就会自己为这个程序创建一个主线程

线程可以由程序后期开启 ,自己开启线程称之为子线程

为什么需要线程:

它的目的只有一个就是提高效率,

因为在是在进程中,只有一个线程的话效率很低,多个线程就可以完成更多的工作,

还有一个原因就是,在创建多个进程来完成的话,就会及其的消耗资源

如何使用创建线程:

两种方法

   一个使用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

这是一个

 

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/WBaiC1/p/10976042.html
今日推荐