threading.Thread类详解

发布时间 2023-07-28 23:31:42作者: Allen_Hao
 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()

输出:

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()

输出:

Thread Thread 1 started
Thread Thread 2 started
Thread Thread 1 finished
Thread Thread 2 finished
All threads completed