避免退出时,output阻塞退出
This commit is contained in:
parent
5d2b86d8e7
commit
2444545dc1
@ -31,6 +31,7 @@ class OutputManager():
|
||||
}
|
||||
_writer: "List[IOutput]" = []
|
||||
_thread: "Optional[threading.Thread]"= None
|
||||
_should_exit = threading.Event()
|
||||
|
||||
def __init__(self):
|
||||
_config = config()['output']['use']
|
||||
@ -107,14 +108,22 @@ class OutputManager():
|
||||
writer.error_output(message.method, message.payload, e)
|
||||
|
||||
def start_loop(self):
|
||||
self._should_exit.clear()
|
||||
self._thread = threading.Thread(target=self._handle)
|
||||
self._thread.start()
|
||||
|
||||
def _handle(self):
|
||||
while True:
|
||||
message = MESSAGE_QUEUE.get()
|
||||
if self._should_exit.is_set():
|
||||
break
|
||||
if message is None:
|
||||
continue
|
||||
self.decode_payload(message)
|
||||
|
||||
def terminate(self):
|
||||
self._should_exit.set()
|
||||
MESSAGE_QUEUE.put(None)
|
||||
|
||||
for writer in self._writer:
|
||||
writer.terminate()
|
||||
|
@ -1,4 +1,8 @@
|
||||
from queue import SimpleQueue
|
||||
from proxy.common import MessagePayload
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
MESSAGE_QUEUE: "SimpleQueue[MessagePayload]" = SimpleQueue()
|
||||
if TYPE_CHECKING:
|
||||
from typing import Optional
|
||||
from proxy.common import MessagePayload
|
||||
|
||||
MESSAGE_QUEUE: "SimpleQueue[Optional[MessagePayload]]" = SimpleQueue()
|
||||
|
Reference in New Issue
Block a user