我的生产系统偶尔会出现我在开发环境中无法重现的内存泄漏.我使用了Python内存分析器(特别是Heapy)在开发环境中取得了一些成功,但它无法帮助我处理我无法重现的事情,而且我不愿意使用Heapy来检测我们的生产系统,因为它需要一段时间来做它的事情,它的线程远程接口在我们的服务器中不能很好地工作.
我想我想要的是一种转储生产Python进程(或至少是gc.get_objects)的快照的方法,然后离线分析它以查看它在哪里使用内存. 我如何获得这样的python进程的核心转储? 一旦我有了,我该怎么做一些有用的东西?
如果用户使用我的Python应用程序并且应用程序崩溃,应用程序的状态可以保存到文件并发送给我,即开发人员,该怎么办?我打开Python解释器并从用户崩溃的地方开始调试.
为了澄清一下,当我调试应用程序并引发一个未处理的异常时,我可以调试应用程序验证,访问所有局部变量及其值,这对于快速修复错误至关重要.当用户的应用程序崩溃时,我只收到错误发生时的堆栈跟踪,这很有用,但不会像交互式调试那样多.
那么是否可以将Python应用程序的状态保存到文件中,关闭解释器,然后在稍后阶段从该文件恢复执行?
我有一个gui_project具有属性的对象.namespace,这是一个命名空间字典.(即从字符串到对象的字典.)
(这在类似IDE的程序中使用,让用户在Python shell中定义自己的对象.)
我想gui_project用命名空间来腌制它.问题是,命名空间中的某些对象(即.namespacedict的值)不是可选对象.例如,其中一些是指wxPython小部件.
我想过滤掉不可剔除的对象,也就是说,将它们从pickle版本中排除.
我怎样才能做到这一点?
(我尝试过的一件事就是逐一对价值进行尝试并尝试腌制它们,但是发生了一些无限递归,我需要保护它.)
(我现在实现了一种GuiProject.__getstate__方法,除了其他无法解决的东西namespace.)