20240728
引言
采用多线程来管理多个不同的任务是一种有效是任务并行化的手段。但是不同的任务在执行的过程中,线程的相关信息管理就成了问题。例如,python的多线程库并没有实现终止的命令,那么就必须自己来实现。
而且,有时候也需要对线程主动的关闭和启动,这时候就有必要在线程结束之后进行一些资源的回收,例如关闭文件,关闭套接字等。
实现方法
根据上述需求,主要参考了两篇文章[1][2],形成相关的封装类,代码如下:
python
from threading import Thread, Event
from abc import abstractmethod
import traceback
from loguru import logger
class Worker(Thread):
def __init__(self, name) -> None:
Thread.__init__(self, daemon=True)
self.name = name
self._event = Event()
self.exit_code = None
self.exception = None
self.exc_traceback = ''
def stop(self):
self._event.set()
@abstractmethod
def _run(self):
raise NotImplementedError
def run(self):
try:
self._run()
except Exception as e:
logger.exception("Error on Worker level")
self.exception = e
self.exit_code = 1
self.exc_traceback = traceback.format_exc()
else:
self.exit_code = 0
在自己继承的实际工作类中,可以通过持续轮训_event是否是设置变量来检查是否需要停止先成功,然后关闭相关的资源。