多线程-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

 

 

版权声明:
作者:admin
链接:https://www.chenxie.net/archives/1924.html
来源:蜀小陈
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>