首页 » 编程 » Python » Python学习 » 网络编程进阶 » 正文

Thread对象的其他属性和方法

查看线程名字:

  • currentThread().getName()
  • t.getName()
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)
    t.start()
    print("线程名:", t.getName())
    print("主线程:", currentThread().getName())  # 主线程默认叫 MainThread

 

输出:

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

 

 

发表评论

*