11月1日线程的其它方法

发布时间 2023-11-01 14:12:30作者: songjunwan

线程的其它方法

Thread实例对象的方法

1.is_alive()用来判断线程是否还在运行活着

代码

import time
from threading import Thread


def task():
    print('子线程start')
    time.sleep(2)
    print('子线程end')


if __name__ == '__main__':
    t = Thread(target=task)
    t2 = Thread(target=task)
    t.start()
    print(t.is_alive())  # 返回线程是否是活动的,返回True即为活动的,返回False即为不活动的
    print(t2.is_alive())  # 这里我没有让t2的线程开启所以返回False

结果如图

2.getName返回该线程的名

代码

import time
from threading import Thread


def task():
    print('子线程start')
    time.sleep(2)
    print('子线程end')


if __name__ == '__main__':
    t = Thread(target=task)
    t2 = Thread(target=task)
    t.start()

    # 返回线程名
    print(t.getName())  # 返回线程名字,这个方法在用的时候会有报错的可能,但是不影响使用,

    print(t2.getName())  # 返回线程t2的名字

结果如图

这个方法在使用的时候会报错但是不影响功能的实现,它报错是因为这个方法被弃用了,不推荐使用了,所以这个方法了解就行了少用为好。

3.setName设置线程名

代码

import time
from threading import Thread


def task():
    print('子线程start')
    time.sleep(2)
    print('子线程end')


if __name__ == '__main__':
    t = Thread(target=task)
    t2 = Thread(target=task)
    t.start()

    # 设置线程名字
    t.setName('jw')  # 这里给t的线程名设置为jw
    t2.setName('zy')  # 这里给t2的线程名设置为zy

    # 返回线程名
    print(t.getName())  # 返回线程名字,这个方法在用的时候会有报错的可能,但是不影响使用,

    print(t2.getName())  # 返回线程t2的名字

结果如图

然后这个方法也被弃用了,可以得到结果但是尽力少用

threading模块提供的一些方法

1.currentThread()返回当前的线程变量

在子线程就返回子线程的变量(线程名、pid等) ,在主线程就返回主线程的变量(线程名、pid等)

代码

import time
from threading import Thread, currentThread, enumerate, activeCount


def task():
    print('子线程start')
    print('在子线程中')
    time.sleep(2)
    print('子线程end')
    print(currentThread())  # 这里输出的是子线程的pid

if __name__ == '__main__':
    t = Thread(target=task)
    t2 = Thread(target=task)
    t.start()
    t2.start()

    print(currentThread())#这里输出的是主线程的pid

结果如下

然后也可以只输出线程的名字

代码如下

#currentThread只输出线程名
import time
from threading import Thread, currentThread, enumerate, activeCount


def task():
    print('子线程start')
    time.sleep(2)
    print('子线程end')
    print(currentThread().name)  # 这里输出的是子线程的pid

if __name__ == '__main__':
    t = Thread(target=task)
    t2 = Thread(target=task)
    t.start()
    t2.start()

    print(currentThread().name)#这里输出的是主线程的pid

结果如图

然后这个方法也是一样被弃用了,少用就行

2.enumerate()返回一个包含正在运行的线程的list,正在运行指线程启动后、结束前,不包括启动前和终止后的线程

代码如下

#enumerate的用法
import time
from threading import Thread, currentThread, enumerate, activeCount


def task():
    print('子线程start')
    time.sleep(2)
    print('子线程end')


if __name__ == '__main__':
    t = Thread(target=task)
    t2 = Thread(target=task)
    t.start()
    t2.start()
    print(enumerate())#返回一个正在运行的线程的list

结果如下

这个方法没有被弃用,同时它的功能也比currentThread强得多。

3.activeCount()返回正在运行的线程数据,与len(threading.enumerate())有相同的结果

代码如下

#enumerate的用法
import time
from threading import Thread, currentThread, enumerate, activeCount


def task():
    print('子线程start')
    time.sleep(2)
    print('子线程end')


if __name__ == '__main__':
    t = Thread(target=task)
    t2 = Thread(target=task)
    t.start()
    t2.start()

    #这里打印正在运行的线程数量
    print(activeCount())

结果如下

这个方法也是被弃用了,但是下面的方法就可以替代这个方法

然后还有一个格式与这个方法结果一样

代码如下

#enumerate的用法
import time
from threading import Thread, currentThread, enumerate, activeCount


def task():
    print('子线程start')
    time.sleep(2)
    print('子线程end')


if __name__ == '__main__':
    t = Thread(target=task)
    t2 = Thread(target=task)
    t.start()
    t2.start()

    #这里打印正在运行的线程数量
    print(activeCount())
    print(len(enumerate()))#返回正在运行的线程数量

结果如图