threading.Thread类详解

复制代码
 1 '''
 2 threading.Thread类是Python threading模块中用于创建和管理线程的主要类。它可以通过子类化并重写run()方法来定义自己的线程逻辑。一般会使用线程池
 3 1. 构造器:
 4     threading.Thread类的构造器如下:
 5     class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)
 6         1. group:不常用,为了向后兼容而保留。
 7         2. target:指定线程要执行的可调用对象(函数)。
 8         3. name:线程的名称。
 9         3. args:传递给target函数的位置参数,以元组形式提供(元组方式传参一定要和参数的顺序保持一致。)。
10         4. kwargs:传递给target函数的关键字参数,以字典形式提供(字典方式传参字典中的key一定要和参数名保持一致)。
11         5. daemon:指定线程是否为守护线程,默认为None即非守护线程
12 
13 2. 常用方法:
14     1. start():启动线程,使其开始执行任务(如果有重写run方法就自动执行run方法或执行构造器target参数指定的函数/方法)
15     2. join(timeout=None):等待线程执行完成。如果指定了timeout参数,表示最长等待时间,超过该时间后仍未完成,则继续执行后续代码。
16     3. is_alive():检查线程是否仍然活动。
17     4. getName():获取线程的名称。
18     5. setName(name):设置线程的名称。
19     6. ident:线程的唯一标识符,只读属性。也可通过thread_id = threading.get_ident()获取当前线程的id
20 
21 
22 '''
23 import threading
24 import time
25 
26 
27 def task(name):
28     print(f"Thread {name} started")
29     time.sleep(2)  # 模拟耗时操作
30     print(f"Thread {name} finished")
31 
32 
33 def main():
34     thread1 = threading.Thread(target=task, args=("Thread 1",))
35     thread2 = threading.Thread(target=task, args=("Thread 2",))
36 
37     thread1.start()
38     thread2.start()
39 
40     thread1.join()
41     thread2.join()
42 
43     print("All threads completed")
44 
45 
46 if __name__ == "__main__":
47     main()
复制代码

输出:

1
2
3
4
5
Thread Thread 1 started
Thread Thread 2 started
Thread Thread 2 finished
Thread Thread 1 finished
All threads completed

 

继承Thread类创建线程实现多线程多任务的方式:

复制代码
 1 import threading
 2 import time
 3 
 4 
 5 class MyThread(threading.Thread):
 6     def __init__(self, name):
 7         super().__init__()
 8         self.name = name
 9 
10     def run(self):
11         print(f"Thread {self.name} started")
12         time.sleep(2)  # 模拟耗时操作
13         print(f"Thread {self.name} finished")
14 
15 
16 def main():
17     thread1 = MyThread("Thread 1")
18     thread2 = MyThread("Thread 2")
19 
20     thread1.start()
21     thread2.start()
22 
23     thread1.join()
24     thread2.join()
25 
26     print("All threads completed")
27 
28 
29 if __name__ == "__main__":
30     main()
复制代码

输出:

1
2
3
4
5
Thread Thread 1 started
Thread Thread 2 started
Thread Thread 1 finished
Thread Thread 2 finished
All threads completed

自定义线程类:

  1.让自定义类 继承threading.Thread
  2.让自定义类 重写run方法
  3.通过实例化自定义类对象.start() 方法启动自定义线程

而创建自己的线程实例后,通过Thread类的start方法,可以启动该线程,交给python虚拟机进行调度,当该线程获得执行的机会时,就会调用run方法执行线程。

posted @   Allen_Hao  阅读(484)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示