线程

一:线程的基础概念#

(1)什么是线程:进程/线程其实都是虚拟单位 帮助我们描述某种事物

 

(2)线程进程的区别

  (1)进程:

    (1)资源单位

    (2)其帮我提供程序运行所需要的资源

  (2)线程:

    (1)执行单位

    (2)帮助我们真正的执行程序

例如:内存相当于一个工厂,程序就是工厂的车间,线程就是车间的流水线来执行车间的工作

PS:每一个进程都自带一个线程 进程提供程序运行所需要的资源 线程用来真正的执行程序

 

(3)线程的好处

  开进程:

    (1)开进程:申请内存空间 浪费资源

    (2)代码拷贝:耗费资源

  开线程:

    (1)一个进程内可以开启多个线程

    (2)线程之间数据是共享的

PS:使用线程的好处 节省内存资源

 

(3)线程的使用方法:

方法一:

复制代码
from threading import Thread
import time


def test(name):
    print('%s running' % name)
    time.sleep(2)
    print('%s over' % name)


if __name__ == '__main__':
    t = Thread(target=test, args=('SR',))
    t.start()
    print('')
View Code
复制代码

方法二:

复制代码
from threading import Thread
import time

class MyThread(Thread):
    def __init__(self,name):
        super().__init__()
        self.name = name

    def run(self):
        print('%s is running'%self.name)
        time.sleep(3)
        print('%s is over'%self.name)

t = MyThread('egon')
t.start()
print('')
View Code
复制代码

 

(3)线程之间的属性方法

复制代码
import os
from threading import current_thread
def test():
    print(current_thread().name)
    print(os.getpid()) # 8248

t = Thread(target=test)
t.start()
print(current_thread().name)
print(os.getpid()) # 8248
current_thread
复制代码

PS:一个进程内可以有多个线程

 

复制代码
from threading import active_count
def test():
    print('hello')

t = Thread(target=test)
t.start()
print(active_count())
active_count
复制代码

 

(4)守护线程:

  (1)主线程结束此时守护线程立马结束

  (2)如果是非守护进程 如果主线程结束 其余子线程不会立马结束 需要等到所有子线程结束才能立马结束

因为:主线程结束立马主进程结束 其会回收资源空间  导致其余子线程不能再继续执行

 

(5)线程之间是可以相互通信的

复制代码
from threading import Thread
money = 666
def test():
    global money
    money = 999

t = Thread(target=test)
t.start()
t.join()
print(money) # 999
复制代码

 

(6)互斥锁

复制代码
n = 100

def task(mutex):
    global  n
    mutex.acquire()
    tmp = n
    time.sleep(0.1)
    n = tmp - 1
    mutex.release()

t_list = []
mutex = Lock()
for i in range(100):
    t = Thread(target=task,args=(mutex,))
    t.start()
    t_list.append(t)
for t in t_list:
    t.join()
print(n)
View Code
复制代码
posted @   SR丶  阅读(129)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示
CONTENTS