Python win32com内存不足错误

时间:2016-03-11 13:03:21

标签: python winapi com win32com

为了操作第三方设备,我使用python的win32com模块与提供的UI进行交互。这通常可以正常工作,但很少(每10k调用一次)COM API会使用描述-2147024888引发错误0x80070008not enough storage is available to process this command)。这非常烦人,因为它通常在夜间杀死设备,并且运行程序需要完全重复。

现在的问题是, 实际上是内存不足,因为我肯定没有达到任何RAM限制。深入研究问题,我发现我也无法关闭并重新打开COM连接,因为这会导致错误-21470248820x8007000e)被描述为out of memory。但是,this回答暗示实际上没有涉及内存问题。作为另一种解释,建议使用过多的句柄here

观点支持这个想法,我现在不能再分叉线程了。在start()上致电threading.Thread我获得了

RuntimeError: can't start new thread

虽然根据threading.active_count()只运行了4个线程。同时,从运行python的不同进程中没有观察到这些问题。因此,我怀疑我的流程耗尽了一些资源,但我不知道哪个。目前我看到了两个如何进行的选择。

  • 选项1:找出我的流程耗尽的资源。但是,我不是真正的调试专家。我可以尝试做些什么,以便更好地了解幕后发生的事情?

  • 选项2:解决问题并解决问题。在这种情况下,错误捕获似乎不够。一旦发生错误,似乎无法在不杀死python进程的情况下让所有内容再次运行。当然,这在python中是不可能的。

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

对于这两个选项,我很乐意提供建议或指导。也许还有一些完全不同的东西,我没想过。任何帮助表示赞赏。

编辑:在Ben的评论的推动下,我查找了仍在运行的进程的一些属性,其中发生了错误。以下是我认为可能有用的数据列表:

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

0 个答案:

没有答案