多线程-Thread对象的其他属性和方法
Thread实例对象的方法
# isAlive() 返回线程是否活动的。
# getName() 返回线程名。
# setName() 设置线程名。
threading模块提供的一些方法:
# threading.currentThread() 返回当前的线程变量。
# threading.enumerate() 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
# threading.activeCount() 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。
查看线程名字:
- currentThread().getName()
- t.getName()
from threading import Thread, currentThread
import time
def task():
print("%s is running" % currentThread().getName())
time.sleep(2)
print("%s is done" % currentThread().getName())
if __name__ == '__main__':
t = Thread(target=task)
t.start()
print("子线程名字:", t.getName())
print("主线程名字:", currentThread().getName())
输出:
Thread-1 is running 子线程名字: Thread-1 主线程名字: MainThread Thread-1 is done
设置线程名称:
- 可通过 name="子线程" 设置
- 也可通过 t.setName("二次子线程") 设置。
from threading import Thread, currentThread
import time
def task():
print("%s is running" % currentThread().getName()) # 子线程默认叫 Thread-1
time.sleep(2)
print("%s is done" % currentThread().getName())
if __name__ == '__main__':
t = Thread(target=task, name="子线程") # 设置子线程名字为:子线程
t.start()
t.setName("二次子线程") # 设置子线程名字为:二次子线程
print("线程名:", t.getName())
currentThread().setName("我是主线程") # 设置主线程名字为:我是主线程
print("主线程:", currentThread().getName()) # 主线程默认叫 MainThread
输出:
子线程 is running 线程名: 二次子线程 主线程: 我是主线程 二次子线程 is done
说明:
程序运行,首先设置了子线程名字为“子线程”,运行到task函数,正常输出 子线程 is running ,然后睡2秒,在睡2秒的过程中,又给子线程设置了名字“二次子线程”,接着输出一下子线程名字为设置的 二次子线程,然后又设置了主线程的名字为“我是主线程”,接着正常输出设置了的主线程名称,这些都运行完后,2秒也过去了,最后输出了task函数的最后一句代码结果 “二次子线程 is done”,因为线程名字已经在睡的时候改过了。
查看线程是否存活:
- t.is_alive()
- t.isAlive()
以上两个方法是一样的,存活返回True ,不存活返回 False
print(t.is_alive()) # 输出 True 或 False
查看线程数量:
- active_count() 返回线程数量的数值, 需要引入:active_count
- enumerate() 返回线程列表,需要引入:enumerate
from threading import Thread, currentThread, active_count, enumerate
import time
def task():
print("%s is running" % currentThread().getName())
time.sleep(2)
print("%s is done" % currentThread().getName())
if __name__ == '__main__':
t = Thread(target=task, name="子线程")
t.start()
print("主线程:", currentThread().getName())
print(active_count()) # 输出:2
print(enumerate()) # 输出:[<_MainThread(MainThread, started 43108)>, <Thread(子线程, started 59756)>]
t.join()
print(active_count()) # 输出:1 , 因为子线程已经运行完了
输出:
子线程 is running 主线程: MainThread 2 [<_MainThread(MainThread, started 16492)>, <Thread(子线程, started 38412)>] 子线程 is done 1
共有 0 条评论