python 不释放文件句柄到日志文件

2023-12-02

我有一个必须运行多次模拟的应用程序。我想设置一个日志记录机制,其中所有日志记录都记录在general.log中,并且模拟运行的所有日志都转到run00001.log,...为此,我定义了一个类Run。在里面__init__()为运行日志添加了一个新的文件句柄。

问题是运行的日志文件永远不会被释放,因此在多次运行之后,可用句柄耗尽并且运行崩溃。

我设置了一些例程来测试这一点,如下所示

主程序

import Model
try:
    myrun = Model.Run('20130315150340_run_49295')
    ha = raw_input('enter')
    myrun.log.info("some info")
except:
    traceback.print_exc(file=sys.stdout)

ha = raw_input('enter3')

类 Run 在模块 Model 中定义如下

import logging
class Run(object):

    """ Implements the functionality of a single run. """
    def __init__(self, runid):
        self.logdir="."
        self.runid          = runid
        self.logFile        = os.path.join(self.logdir , self.runid + '.log')
        self.log            = logging.getLogger('Run'+self.runid)
        myformatter         = logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s')
        myhandler      = logging.FileHandler(self.logFile)
        myhandler.setLevel(logging.INFO)
        myhandler.setFormatter(myformatter)
        self.log.addHandler(myhandler) 

然后我使用程序进程资源管理器来跟踪文件处理程序。我看到运行日志出现,但从未消失。

有什么办法可以强制我这么做吗?


你需要打电话.close()在文件处理程序上。

当你的Run课程结束,请致电:

handlers = self.log.handlers[:]
for handler in handlers:
    self.log.removeHandler(handler)
    handler.close()

每次新的日志消息到达时,文件处理程序都会自动重新打开配置的文件名,因此调用handler.close()有时可能显得徒劳。从记录器中删除处理程序会阻止将来的日志记录发送给它;在上面的代码中,我们首先执行此操作,以避免来自另一个线程重新打开处理程序的不合时宜的日志消息。

这里的另一个答案建议您使用logging.shutdown()。然而,这一切logging.shutdown()确实是打电话handler.flush() and handler.close(),我会不建议使用它。它使日志记录模块处于无法使用的状态logging.shutdown()再次,不可靠。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 不释放文件句柄到日志文件 的相关文章

  • 为什么 Python 在导入脚本时只保存脚本的字节码?

    既然执行Python字节码会比运行原始源代码更快 因为Python不需要重新编译 为什么Python在导入脚本时只保存编译后的字节码呢 为每个执行的脚本保存 pyc 文件不是更好吗 无论如何 Python 解释器的启动时间都需要时间 即使您
  • str.translate 与 str.replace - 何时使用哪一个?

    何时以及为什么使用前者而不是后者 反之亦然 目前尚不完全清楚为什么有些人使用前者以及为什么有些人使用后者 它们有不同的目的 translate只能用任意字符串替换单个字符 但一次调用可以执行多次替换 它的参数是一个特殊的表 它将单个字符映射
  • 键入的完整命令行

    我想获得输入时的完整命令行 This join sys argv 在这里不起作用 删除双引号 另外 我不想重新加入已解析和拆分的内容 有任何想法吗 你太迟了 当键入的命令到达 Python 时 您的 shell 已经发挥了它的魔力 例如 引
  • Matplotlib 图例,跨列添加项目而不是向下添加项目

    对于下面的简单绘图 有没有办法让 matplotlib 填充图例 以便它从左到右填充行 而不是第一列然后第二列 gt gt gt from pylab import gt gt gt x arange 2 pi 2 pi 0 1 gt gt
  • 为什么在连接两个字符串时 Python 比 C 更快?

    目前我想比较 Python 和 C 用来处理字符串的速度 我认为 C 应该比 Python 提供更好的性能 然而 我得到了完全相反的结果 这是 C 程序 include
  • 带有 mkdocs 的本地 mathjax

    我想在无法访问互联网的计算机上使用 MathJax 和 Mkdocs 因此我不能只调用 Mathjax CDN Config mkdocs yml site name My Docs extra javascript javascripts
  • Python - Unicode 到 ASCII 的转换

    我无法在不丢失数据的情况下将以下 Unicode 转换为 ASCII u ABRA xc3O JOS xc9 I tried encode and decode他们不会这么做 有人有建议吗 Unicode 字符u xce0 and u xc
  • 设置高亮大括号的 vim 颜色主题

    如何更改突出显示大括号的 vim 配色方案 我希望实际编辑 vim 主题文件以使更改永久生效 问候 克雷格 匹配括号的自动高亮颜色称为MatchParen 您可以通过执行以下操作来更改 vimrc 中的颜色 highlight MatchP
  • 数据框中 .map(str) 和 .astype(str) 有什么区别

    我有一个数据框 其列名为 col1 和 col2 的整数类型条目 我想将 col1 和 col2 的条目以及其间的 点 连接起来 我搜索并发现添加两个列条目 df col df col1 map str df col2 map str 并添
  • Python-验证我的文档 xls 中是否存在工作表

    我正在尝试在空闲时间设计一个小程序 加载 xls 文件 然后在要扫描的文档中选择一张纸 步骤1 用户导入 xls文件 导入程序后检查文件是否存在 我能做到的 第 2 步 我要求用户提供要分析的文档表 xls 的名称 这就是它停止的地方 该程
  • 为什么将模块级代码放入函数中然后调用该函数在Python中速度更快?

    在亚历克斯 马尔泰利的回应中使 Python 脚本面向对象 https stackoverflow com questions 1813117 making a python script object oriented 他提到在 Pyth
  • Python:在字典中查找具有唯一值的键?

    我收到一个字典作为输入 并且想要返回一个键列表 其中字典值在该字典的范围内是唯一的 我将用一个例子来澄清 假设我的输入是字典 a 构造如下 a dict a cat 1 a fish 1 a dog 2 lt unique a bat 3
  • Django 2、python 3.4 无法解码 urlsafe_base64_decode(uidb64)

    我正在尝试通过电子邮件激活用户 电子邮件有效 编码有效 我使用了 django1 11 中的方法 该方法运行成功 在 Django 1 11 中 以下内容成功解码为 28 其中 uidb64 b Mjg force text urlsafe
  • 为什么 Collections.counter 这么慢?

    我正在尝试解决罗莎琳德的基本问题 即计算给定序列中的核苷酸 并在列表中返回结果 对于那些不熟悉生物信息学的人来说 它只是计算字符串中 4 个不同字符 A C G T 出现的次数 我期望collections Counter是最快的方法 首先
  • 如何在matplotlib中调整x轴

    I have a graph like this x轴上的数据表示小时 所以我希望x轴设置为0 24 48 72 而不是现在的值 很难看到 0 100 之间的数据 fig1 plt figure ax fig1 add subplot 11
  • 无法导入QUERY_TERMS

    我正在运行一个网站Python and Django Django filters 2 1 installed Django 2 1 installed 当我运行时 我收到以下错误 importError Could not import
  • 如何展平解析树并存储在字符串中以进行进一步的字符串操作 python nltk

    我正在尝试从树结构中获取扁平树 如下所示 我想将整个树放在一个字符串中 就像没有检测到坏树错误一样 S NP SBJ NP DT The JJ high JJ seven day PP IN of NP DT the CD 400 NNS
  • 无需访问 Internet 即可部署 Django 的简单方法?

    我拥有的是使用 Django 开发的 Intranet 站点的开发版本以及放置在 virtualenv 中的一些外部库 它运行良好 我可以在任何具有互联网连接的计算机上使用相同的参数 使用 pip 轻松设置 virtualenv 但是 不幸
  • 如何使用 enumerate 来倒数?

    letters a b c 假设这是我的清单 在哪里for i letter in enumerate letters 将会 0 a 1 b 2 c 我怎样才能让它向后枚举 如 2 a 1 b 0 c 这是一个很好的解决方案并且工作完美 i
  • Python 相当于 Scala 案例类

    Python 中是否有与 Scala 的 Case Class 等效的东西 就像自动生成分配给字段而无需编写样板的构造函数一样 当前执行此操作的现代方法 从 Python 3 7 开始 是使用数据类 https www python org

随机推荐

  • 空手道:[主要] INFO com.intuit.karate - karate.env 系统属性为:null [重复]

    这个问题在这里已经有答案了 在尝试使用生成的令牌执行下一个场景时 在令牌身份验证流程之后出现错误 主要 INFO com intuit karate 空手道系统属性为 null 我使用了以下代码 特征文件 Feature Login Tok
  • Python项目结构和相关导入

    我是Python新手 我在谷歌上搜索了很多 并阅读了一些有关相对导入等的文章 尽管事实上我无法让它工作 请考虑我的以下项目结构 Project docs log prev src a py tests tests1 b py tests2
  • 直接从无头图像字节数组创建缩略图

    我的应用程序一次显示大量图像缩略图 目前 我将所有全尺寸图像保留在内存中 并简单地在 UI 中缩放图像以创建缩略图 但是 我宁愿只在内存中保留小缩略图 并且仅在必要时加载全尺寸图像 我认为这很容易 但与仅在 UI 中缩放全尺寸图像相比 我生
  • 您的凭据不允许访问此资源 Twitter API 错误

    我正在研究 Twitter api 一些 api 得到了响应 但statuses home timeline jsonapi 和其他 api 没有得到响应 出现错误 errors code 220 message Your credenti
  • 从 AEM 下载包后如何在 Eclipse 中使用它

    我从包管理器中从正在运行的 AEM 实例下载了一个 zip http localhost 4502 crx packmgr index jsp 解压缩后的 zip 文件包含 jcr root and META INF 我想在此 zip 文件
  • 如何自动允许 IE 中阻止的内容?

    我使用下面的代码作为示例菜单
  • 水平和垂直滑动的动态视图

    请检查上面的视图 我必须相应地创建一个视图 当我们从左向右滑动时 图像将与从右向左滑动相同 当我从上到下滑动时 将会出现网络视图 并且从下到上滑动图像将会出现 所有数据 例如图像和网址 都是动态的 并且数据将来自服务器 我还必须在其中应用拉
  • JAXB 将循环引用映射到 XML

    我有一个包含循环的对象图 我如何让 JAXB 处理这个问题 我尝试使用 XmlTransient子类中的注释 但 JAXB 编组器仍然检测到循环 Entity XmlRootElement public class Contact Id p
  • 如何让函数执行得更快?

    我有以下功能 https i stack imgur com yXA67 png where mu是矩阵 n X 行和 n Y 列 d X 和 d Y 是距离矩阵 在 R 中实现此函数的一种方法是 H mu lt function mu d
  • jQuery.noConflict() 破坏插件

    我在 Rails 应用程序中同时使用 Prototype 和 jQuery 为了解决 冲突我执行以下操作 这大部分工作正常 但我正在尝试使用a plugin不喜欢它并抛出一个 is not a function type error 我能做
  • 为什么 Node.js 没有原生 DOM?

    当我发现这一点时Node js 使用 V8 JavaScript 引擎构建 我想 太好了 网页抓取会随着页面变得更容易 将像在浏览器中一样呈现 带有 支持 XPath 和任何 AJAX 调用的 本机 DOM 执行的页面 为什么它使用与 Ch
  • 使用 Android 拍照时出现问题(垂直相机 | 肖像)

    使用以下代码显示相机的垂直预览 它的工作原理 但 我得到一张风景照片 我如何垂直构建它 我有垂直预览视图 但无法垂直保存图片 问候和感谢 弗兰 ONCLICK public void onClick View arg0 camera tak
  • 使用多线程的JPA持久化

    当我尝试使用持久化对象时遇到问题多线程 细节 假设我有一个对象PaymentOrder其中有一个列表PaymentGroup 一对多关系 和PaymentGroup包含一个列表CreditTransfer 再次是一对多关系 由于数量Cred
  • Keras ValueError:尝试将模型加载到另一个平台时未知层:名称

    我在 Nvidia Quadro 板上使用 Keras 2 2 4 训练了一个卷积神经网络 我已将经过训练的模型保存在两个单独的文件中 一个文件 model json 描述架构 另一个文件 model h5 包含所有权重 我想在运行 Ker
  • 从一系列繁忙时间范围中获取可用时间范围

    假设你有一个数组BUSY会议的时间范围 start 9 00 AM end 10 00 AM start 12 00 PM end 2 00 PM start 5 00 AM end 7 00 PM 我想得到一组回报可用的24 小时范围内的
  • ModelForm 中 FileField 上传的进度条 (Django)

    我正在寻找一些实现文件上传进度条的指针 该进度条提供有关 ModelForm 内 FileField 上传当前状态的反馈 我的 ModelForm 有很多字段 不仅仅是 FileField 我想用进度条显示进度的实时反馈 Thanks 这是
  • IVY Build,如何在项目中使用extlib目录?

    有几个 jar 文件 它们来自我们保存在项目根目录下的项目 extlib 文件夹中的 COTS 产品 我想将这些包含在 ivy 中 但不放入存储库中 只需从 project extlib 文件夹中读取 这是可能的还是我需要将它们添加到工件中
  • 有没有什么解决方案可以在模拟器(Android)中运行Google Plus Posting(分享互动帖子)

    我正在 Android 应用程序中集成 Google Plus 但是在模拟器中的 Google Plus 上共享帖子时遇到了问题因为It requires Google Plus installed on Emulator 但我们无法在模拟
  • 无法扩展 F# 中的运算符?

    module FSharp let Point2d x y Point2d x y let Point3d x y z Point3d x y z type NXOpen Point3d with static member p Point
  • python 不释放文件句柄到日志文件

    我有一个必须运行多次模拟的应用程序 我想设置一个日志记录机制 其中所有日志记录都记录在general log中 并且模拟运行的所有日志都转到run00001 log 为此 我定义了一个类Run 在里面 init 为运行日志添加了一个新的文件