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多线程捕获子线程的异常,并退出主进程。

[2]python多线程编程:如何优雅地关闭线程

相关推荐
龙哥说跨境3 分钟前
如何利用指纹浏览器爬虫绕过Cloudflare的防护?
服务器·网络·python·网络爬虫
Source.Liu3 分钟前
【用Rust写CAD】第二章 第四节 函数
开发语言·rust
monkey_meng3 分钟前
【Rust中的迭代器】
开发语言·后端·rust
余衫马6 分钟前
Rust-Trait 特征编程
开发语言·后端·rust
monkey_meng10 分钟前
【Rust中多线程同步机制】
开发语言·redis·后端·rust
Jacob程序员12 分钟前
java导出word文件(手绘)
java·开发语言·word
小白学大数据19 分钟前
正则表达式在Kotlin中的应用:提取图片链接
开发语言·python·selenium·正则表达式·kotlin
flashman91120 分钟前
python在word中插入图片
python·microsoft·自动化·word
VBA633720 分钟前
VBA之Word应用第三章第三节:打开文档,并将文档分配给变量
开发语言
半盏茶香21 分钟前
【C语言】分支和循环详解(下)猜数字游戏
c语言·开发语言·c++·算法·游戏