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)

相关推荐
How_doyou_do14 分钟前
JS之刷刷
开发语言·javascript·ecmascript
Java开发-楠木21 分钟前
【猿人学】web第一届 第7题 动态字体,随风漂移
爬虫·python
小豪GO!37 分钟前
Java多线程初阶
java·开发语言
码农秋39 分钟前
Java Optional 最佳实践:从入门到精通的完整指南
java·开发语言·optional
CodeCraft Studio1 小时前
国产化Excel开发组件Spire.XLS教程:Python 将 CSV 转换为 Excel(.XLSX)
windows·python·excel·csv转excel·spire·excel开发
大神薯条老师1 小时前
Python从入门到高手9.4节-基于字典树的敏感词识别算法
爬虫·python·深度学习·机器学习·数据分析
一袋米扛几楼981 小时前
【物联网】BLE 系统架构全景图
python·物联网·aws
hvinsion1 小时前
【开源工具】基于Flask与Socket.IO的跨平台屏幕监控系统实战(附完整源码)
javascript·python·flask·开源·socket.io·屏幕监控·web实战
三水彡彡彡彡2 小时前
Java中使用正则表达式的正确打开方式
java·开发语言·正则表达式
李昊哲小课2 小时前
「从 0 到 1」的 Python-requests 爬虫完整教程
爬虫·python