Python win32com内存不足错误

Python win32com内存不足错误,python,winapi,com,win32com,Python,Winapi,Com,Win32com,为了操作第三方设备,我使用python的win32com模块与提供的UI交互。这通常按预期工作,但COM API很少(每10k左右调用一次)抛出错误-2147024888(0x80070008),说明没有足够的存储空间来处理此命令。这非常烦人,因为它通常会在夜间杀死设备,运行过程需要完全重复 现在的问题是,什么是内存不足,因为我肯定没有达到任何RAM限制。深入研究这个问题,我发现我也无法关闭和重新打开COM连接,因为这会导致错误-2147024882(0x8007000e)被描述为内存不足。然而

为了操作第三方设备,我使用python的
win32com
模块与提供的UI交互。这通常按预期工作,但COM API很少(每10k左右调用一次)抛出错误
-2147024888
0x80070008
),说明
没有足够的存储空间来处理此命令。这非常烦人,因为它通常会在夜间杀死设备,运行过程需要完全重复

现在的问题是,什么是内存不足,因为我肯定没有达到任何RAM限制。深入研究这个问题,我发现我也无法关闭和重新打开COM连接,因为这会导致错误
-2147024882
0x8007000e
)被描述为
内存不足。然而,答案暗示实际上不涉及记忆问题。作为另一种解释,建议使用过多的句柄

这一观点将得到观察的支持,即我现在不能再分叉线程了。在
threading.Thread上调用
start()
,我获得

RuntimeError: can't start new thread
尽管根据
threading.active\u count()
只有4个线程在运行。同时,在运行python的另一个进程中没有发现这些问题。因此,我怀疑我的进程耗尽了一些资源,但我不知道是哪个资源。目前,我看到了两个关于如何进行的选择

  • 选项1:找出我的进程正在运行的资源。然而,我并不是真正的调试专家。为了更好地了解幕后发生的事情,我可以尝试做些什么

  • 选择2:接受问题并解决它。在这种情况下,错误捕获似乎不够。一旦出现错误,似乎无法在不中断python进程的情况下让所有内容重新工作。当然,这在python中是不可能的

    作为一个解决方案,我考虑使用这个模块,让所有与设备相关的调用在一个单独的进程中运行。如果出现问题,我会从主程序中删除进程,然后重新启动,并可能在错误发生的地方继续

对于这两种选择,我很乐意提供建议或指导。也许还有一些完全不同的东西,我没有想过。感谢您的帮助


编辑:受Ben评论的启发,我查找了仍在运行的进程的一些属性,其中出现了错误。这里有一个数据列表,我认为它是有用的:

  • 1.7G提交大小,仅使用21M和500M峰值内存(在Win7 x86上)
  • 800k分页错误
  • 772手柄
  • 20线

使用任务管理器详细信息或流程选项卡,并启用可选列。其中一个是“句柄计数”,另一个是“线程计数”,另请参见“提交费用”,这是进程的内存分配。你很快就会看到你正在耗尽什么。性能监视器也会有帮助。谢谢你的建议。我做了一个编辑,包括数据,我认为可能是相关的。暂时我不知道。由于崩溃只发生在每10公里左右的通话中,我从未实时目睹过它,只是看到了整个程序被卡住的后果。我也没有明显的办法,如何重现这次崩溃。有什么想法吗?在我的测试之后,我无法画出一幅连贯的图画。今晚我确实看到了RAM使用率的持续增长,但今天再次运行完全相同的代码,我没有看到。所以我的解释是python的垃圾收集器今晚有点懒。此外,当我连接内存分析器时,我不会得到任何内存泄漏的提示。因此,很有可能,问题一定在别处。@tigertang我的问题中描述的问题已经不存在了,但我从未真正发现是什么让它消失了。然而,我相信根本原因是一个用错误类型初始化的变量。我已经写下了我对此的见解。我不能说这是否会以某种方式转化为您的
子流程