如何在python脚本中跟踪随机内存错误?

2024-04-26 23:22:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python脚本,用于使用多个设备执行实验室测量。整个设置相当复杂,包括通过串行设备进行通信、API调用以及使用自写驱动程序和商业驱动程序。不过,在一个嵌套的文件中,每一个参数都会在一个嵌套的循环中结束。在

我的问题是,我观察到一个^{}的随机发生,通常在10小时后,相当于循环的~15k次。目前,我不知道它是从哪里来的,也不知道如何进一步追踪它。所以我很乐意得到建议,如何解决我的问题。到目前为止,我的观察结果如下。在

  • 错误发生在程序的随机状态。不同的运行将在脚本的不同行抛出MemoryError

  • 从来没有任何有用的错误消息。Python只说MemoryError,没有任何错误字符串。回溯将我带到脚本中的某个地方,那里需要内存(例如,构建列表时),但似乎没有特定的指令,这就是问题所在。

  • 我的公羊远远不够满。当在任务管理器中查看时,所讨论的python进程通常会消耗大约10mb的RAM。此外,RAM的使用似乎在数小时内保持稳定。通常,它会在一段时间内缓慢增加,只是为了快速下降到上一个级别,我将其解释为垃圾收集器定期启动。

  • 到目前为止,我没有发现任何内存泄漏的迹象。我使用^{}跟踪函数的内存使用情况,发现它是稳定的。此外,我还跟踪了this博客条目来详细观察垃圾回收器的工作。再次,我找不到任何未删除对象的提示。

  • 我被困在win7x86由于一个驱动程序,它只能在32位系统上工作。所以我不能按照this这样的建议去使用64位版本的Windows。不管怎样,我不知道这对我的情况有什么帮助。

  • 启动脚本的iPython控制台在错误发生后通常表现得很奇怪。有时,即使对于非常简单的操作,也会抛出一个新的MemoryError。通常,控制台在一段时间后被Windows标记为“没有响应”。弹出一个菜单,除了等待进程或终止进程的常用选项外,还有第三个选项“恢复”程序(无论是什么意思)。这样做通常会导致控制台再次正常工作。

在这一点上,我有点想不出该怎么办了。在我的情况下,将军不愿意把剧本的一部分删掉,直到它发挥作用为止。如上所述,每次测试运行将花费数小时,这意味着我的实验室设备可能会停机数周。往那个方向走,对我来说是不可行的。有没有更直接的方法来学习,什么是幕后黑手?我怎么能理解python显然无法malloc?在


Tags: 内存程序脚本进程windows错误驱动程序情况