线程--thread

线程:

线程是系统分配给内核的最小单元,线程是进程的一部分。

特点:

1.一个进程可以包含多个线程

2.线程也是一个运行行为,消耗计算机资源

3.一个进程中的所有线程共享这个进程的资源

4.多个线程之间运行互不影响

5.线程的创建和销毁所消耗的资源非常少

6.各个线程也有自己的属性,比如线程id等特征

7.由于线程也需要消耗资源,也有并发并行,所以一个进程内的线程可能会分配到不同的cpu核心,所以其实一个进程可能会消耗多个cpu核心。

 

线程的其他属性

t.name 线程名称
t.setName() 设置线程名称
t.getName() 获取线程名称
t.is_alive() 查看线程是否在生命周期
t.daemon 设置主线程和分支线程的退出关系
t.setDaemon() 设置daemon属性值
t.isDaemon() 查看daemon属性值
daemon为True时主线程退出分支线程也退出。要在start前设置,通常不和join一起使用。

 

python使用线程

--基本语法

'''
线程基本使用
步骤:基本同process
1.封装线程函数
2.创建线程对象
3.启动线程
4.回收线程
'''
from threading import Thread
from time import sleep
import os

a = 1
def music():        #分支线程
    for i in range(3):
        sleep(2)
        print('播放:播放黄河大合唱,pid=%s'%os.getpid())
    global a             #引用全局变量a
    print('线程里a=',a)
    a=10000
#创建线程对象
#主线程
t = Thread(target=music)
t.start()
t.join()
print(os.getpid())
print('主线程a=',a)

 

线程类

from threading import Thread
from time import sleep,ctime

class MyThtread(Thread):
    def __init__(self,target=None,args=(),kwargs={}):
        super().__init__()          #由于自己也有属性,为了避免自己的属性覆盖父类的属性,重新加载父类的__init__属性
        print(kwargs)
        self.target = target
        self.args = args
        self.kwargs = kwargs

    def run(self):        #自己写类的run方法
        print(*self.args)
        self.target(*self.args,**self.kwargs)

def Player(sec,song):
    for i in range(3):
        print('Playing %s : %s'%(song,ctime()))
        sleep(sec)
t = MyThtread(target=Player,args=(3,),kwargs={'song':'凉凉'})

t.start()
t.join()

 

posted @ 2022-11-17 22:59  powfu  阅读(36)  评论(0)    收藏  举报