python多线程管理

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是否是设置变量来检查是否需要停止先成功,然后关闭相关的资源。

参考

1\][Python多线程捕获子线程的异常,并退出主进程。](https://www.cnblogs.com/sidianok/p/15726845.html) \[2\][python多线程编程:如何优雅地关闭线程](https://blog.csdn.net/captain5339/article/details/128360804)

相关推荐
databook9 小时前
Manim实现闪光轨迹特效
后端·python·动效
Juchecar11 小时前
解惑:NumPy 中 ndarray.ndim 到底是什么?
python
用户83562907805111 小时前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_11 小时前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi
数据智能老司机18 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机19 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机19 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机19 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i19 小时前
drf初步梳理
python·django
每日AI新事件19 小时前
python的异步函数
python