python的线程类
时间: 2024-12-31 18:41:10 浏览: 4
### Python 中用于创建和管理线程的类
#### `threading.Thread` 类简介
在 Python 的 `threading` 模块中,`Thread` 是最常用的类之一,用来表示一个单独的线程。该类提供了多种方法来控制线程的行为以及获取其状态。
- **初始化 (`__init__`)**
创建一个新的线程实例时可以传递目标函数和其他参数给构造器。通常情况下不需要直接覆盖此方法除非有特殊需求[^4]。
- **运行 (`run`)**
当调用线程对象的 `start()` 方法之后,将会自动调用这个内部的方法去执行传入的目标函数逻辑。如果希望在线程启动后立即执行某些特定操作,则可以通过继承并覆写它实现自定义行为[^2]。
- **开始 (`start`)**
启动线程活动。这将在独立于当前线程的新线程中调用 `run()` 方法。
- **加入 (`join`)**
阻塞主线程直到被等待的那个线程结束为止。这对于确保所有子线程完成工作后再继续程序非常重要。
- **枚举 (`enumerate`)**
返回包含活跃 Thread 对象列表的一个新列表。这些是属于当前进程中的所有存活线程,包括守护线程[^3]。
- **原生 ID 获取 (`get_native_id`)**
返回底层操作系统分配给本线程的实际整数ID。注意不是所有的平台都支持这项功能,在不支持的情况下可能会抛出异常[^1]。
下面是一个简单的例子展示如何使用上述提到的功能:
```python
import threading
import time
class CustomWorker(threading.Thread):
"""A custom worker thread that prints messages."""
def __init__(self, message="Hello from Worker", count=5):
super().__init__()
self.message = message
self.count = count
def run(self):
for i in range(self.count):
print(f"{self.name}: {self.message} ({i})")
time.sleep(0.5)
def main():
workers = []
# Create multiple threads with different parameters.
for idx in range(3):
wkr = CustomWorker(message=f"Message-{idx}", count=(idx + 1)*2)
workers.append(wkr)
# Start all the created threads.
for wk in workers:
wk.start()
active_threads = threading.enumerate()
print("\nActive Threads:")
for thrd in active_threads:
try:
native_id = thrd.get_native_id()
print(f"- Name: {thrd.getName()}, Native ID: {native_id}")
except Exception as e:
print(f"- Error getting native id of '{thrd.getName()}': {str(e)}")
if __name__ == "__main__":
main()
```
这段代码展示了怎样通过继承 `Thread` 来构建自己的工作者线程,并利用一些常用的方法来进行管理和监控它们的状态。
阅读全文