2025-10-08 17:44:44 +08:00
|
|
|
|
#!/usr/bin/env python
|
|
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
|
工作线程模块
|
|
|
|
|
|
|
|
|
|
|
|
职责:
|
|
|
|
|
|
- 作为一个独立的线程运行。
|
|
|
|
|
|
- 阻塞式地等待任务队列。
|
|
|
|
|
|
- 从队列中取出任务,并交给Processor进行耗时处理。
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
2025-10-13 14:35:20 +08:00
|
|
|
|
from app.uqueue import Queue
|
|
|
|
|
|
from app.processor import Processor
|
|
|
|
|
|
from app.logs.logger import log
|
2025-10-08 17:44:44 +08:00
|
|
|
|
|
|
|
|
|
|
|
2025-10-13 14:35:20 +08:00
|
|
|
|
def worker_task(task_queue: Queue, processor: Processor):
|
2025-10-08 17:44:44 +08:00
|
|
|
|
"""
|
|
|
|
|
|
工作线程的主函数。
|
|
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
|
task_queue (uqueue.Queue): 共享的任务队列。
|
|
|
|
|
|
processor (Processor): 业务处理器实例。
|
|
|
|
|
|
"""
|
|
|
|
|
|
log("工作线程已启动,等待任务...")
|
2025-10-08 19:36:48 +08:00
|
|
|
|
|
2025-10-08 17:44:44 +08:00
|
|
|
|
while True:
|
|
|
|
|
|
try:
|
|
|
|
|
|
# 1. 阻塞式地从队列中获取任务
|
|
|
|
|
|
# 如果队列为空,程序会在这里自动挂起,不消耗CPU
|
|
|
|
|
|
# get()方法是线程安全的
|
|
|
|
|
|
packet_bytes = task_queue.get()
|
2025-10-08 19:36:48 +08:00
|
|
|
|
|
2025-10-08 17:44:44 +08:00
|
|
|
|
log(f"工作线程:收到新任务,开始处理... 数据: {packet_bytes.hex()}")
|
2025-10-08 19:36:48 +08:00
|
|
|
|
|
2025-10-08 17:44:44 +08:00
|
|
|
|
# 2. 调用processor进行耗时的、阻塞式的处理
|
|
|
|
|
|
# 这个处理过程不会影响主线程的LoRa监听
|
|
|
|
|
|
processor.handle_packet(packet_bytes)
|
2025-10-08 19:36:48 +08:00
|
|
|
|
|
2025-10-08 17:44:44 +08:00
|
|
|
|
log("工作线程:任务处理完毕,继续等待下一个任务。")
|
2025-10-08 19:36:48 +08:00
|
|
|
|
|
2025-10-08 17:44:44 +08:00
|
|
|
|
except Exception as e:
|
|
|
|
|
|
log(f"错误:工作线程在处理任务时发生异常: {e}")
|