handler 多线程怎么使用
时间: 2023-08-09 21:04:52 浏览: 75
在多线程的情况下,可以使用 `Handler` 对象来实现线程间通信。`Handler` 可以将消息发送到主线程或其它线程的消息队列中,然后由该线程处理消息。下面是一个简单的示例:
``` python
import threading
import time
import random
import queue
# 定义一个消息类型
MSG_TYPE_PRINT = 1
# 定义一个消息处理函数
def handler(msg):
if msg['type'] == MSG_TYPE_PRINT:
print(msg['text'])
# 定义一个线程类
class WorkerThread(threading.Thread):
def __init__(self, handler):
super().__init__()
self.handler = handler
def run(self):
while True:
try:
# 从队列中获取消息
msg = msg_queue.get(timeout=1)
# 处理消息
self.handler(msg)
except queue.Empty:
# 如果队列为空,则休眠一段时间
time.sleep(1)
# 定义一个消息队列
msg_queue = queue.Queue()
# 创建一个 Handler 对象
handler = Handler()
# 创建并启动一个线程
worker_thread = WorkerThread(handler)
worker_thread.start()
# 在主线程中发送消息
for i in range(10):
msg = {'type': MSG_TYPE_PRINT, 'text': f'Message {i}'}
msg_queue.put(msg)
time.sleep(random.random()) # 随机休眠一段时间
```
在上面的代码中,首先定义了一个消息类型和一个消息处理函数。然后定义了一个线程类 `WorkerThread`,该线程类从消息队列中获取消息并交给 `handler` 处理。在主线程中,创建了一个 `Handler` 对象和一个消息队列,并启动了一个 `WorkerThread` 线程。然后循环发送一些消息到消息队列中,每次发送之前随机休眠一段时间,以模拟消息发送的随机性。在 `handler` 中处理消息时,会根据消息类型来执行相应的操作,这里只是简单地将消息文本打印到控制台上。