相关疑难解决方法(0)

如何在Python中分析内存使用情况?

我最近对算法感兴趣,并开始通过编写一个简单的实现,然后以各种方式优化它来探索它们.

我已经熟悉用于分析运行时的标准Python模块(对于大多数事情我已经发现IPython中的timeit魔术功能已足够),但我也对内存使用感兴趣,所以我也可以探索这些权衡(例如,缓存先前计算的值表的成本与根据需要重新计算它们的成本.是否有一个模块可以为我分析给定函数的内存使用情况?

python memory profiling

198
推荐指数
7
解决办法
21万
查看次数

Python - 解决内存泄漏问题

我有一个Python程序,它运行一系列实验,没有数据打算从一个测试存储到另一个测试.我的代码包含一个我完全无法找到的内存泄漏(我看看内存泄漏的其他线程).由于时间限制,我不得不放弃寻找泄漏,但如果我能够隔离每个实验,程序可能会运行足够长的时间来产生我需要的结果.

  • 在单独的线程中运行每个测试有帮助吗?
  • 有没有其他方法来隔离泄漏的影响?

具体情况详情

  • 我的代码有两部分:实验运行器和实际的实验代码.
  • 尽管在运行所有实验的代码和每个实验使用的代码之间没有共享全局变量,但是必须共享某些类/函数.
  • 实验运行器不仅仅是一个简单的for循环,可以很容易地放入shell脚本中.它首先决定在给定配置参数的情况下需要运行的测试,然后运行测试然后以特定方式输出数据.
  • 我试图手动调用垃圾收集器,以防问题只是垃圾收集没有运行,但这不起作用

更新

Gnibbler的答案实际上让我发现我的ClosenessCalculation对象存储了每次计算中使用的所有数据都没有被删除.然后我用它来手动删除一些似乎已修复内存问题的链接.

python memory-leaks

30
推荐指数
1
解决办法
2万
查看次数

lxml解析器吃掉所有内存

我正在python中编写一些蜘蛛并使用lxml库来解析html和gevent库以进行异步.我发现在经过一段时间的工作之后,lxml解析器开始占用内存高达8GB(所有服务器内存).但我只有100个异步线程,每个线程解析文件最大为300kb.

我测试并在lxml.html.fromstring中启动该问题,但我无法重现此问题.

这行代码中的问题:

HTML = lxml.html.fromstring(htmltext)
Run Code Online (Sandbox Code Playgroud)

也许有人知道它可能是什么,或锄头来解决这个问题?

感谢帮助.

PS

Linux Debian-50-lenny-64-LAMP 2.6.26-2-amd64 #1 SMP Tue Jan 25 05:59:43 UTC 2011 x86_64    GNU/Linux
Python : (2, 6, 6, 'final', 0)
lxml.etree : (2, 3, 0, 0)
libxml used : (2, 7, 8)
libxml compiled : (2, 7, 8)
libxslt used : (1, 1, 26)
libxslt compiled : (1, 1, 26)
Run Code Online (Sandbox Code Playgroud)

UP:

我为使用lxml解析器的进程设置了ulimit -Sv 500000和uliit -Sm 615000.

现在有一段时间他们开始写错误日志:

"忽略"错误"lxml.etree._BaseErrorLog._receive中的异常MemoryError:MemoryError()".

并且我无法捕获此异常,因此它会在日志中递归写入此消息,因为磁盘上有可用空间.

我怎样才能捕获这个异常以杀死进程,所以守护进程可以创建新进程?

python lxml memory-leaks

12
推荐指数
1
解决办法
3620
查看次数

Python:Ctypes 如何检查内存管理

所以我使用 Python 作为前端 GUI,它与一些 C 文件交互以作为后端进行存储和内存管理。每当 GUI 的窗口关闭或退出时,我都会为分配的变量调用所有析构函数方法。

无论如何,在退出整个程序以确保没有任何内存泄漏之前,是否可以检查内存泄漏或可用性,例如 C Valgrind 检查?

示例退出:

from tkinter import *
root = Tk()  # New GUI
# some code here

def destructorMethods:
    myFunctions.destructorLinkedList()  # Destructor method of my allocated memory in my C file
    # Here is where I would want to run a Valgrind/Memory management check before closing
    root.destroy()  # close the program

root.protocol("WM_DELETE_WINDOW", destructorMethods)  # When the close window option is pressed call destructorMethods function

Run Code Online (Sandbox Code Playgroud)

c python ctypes valgrind memory-management

9
推荐指数
1
解决办法
377
查看次数

使用Python 2.7.6在Windows上使用Guppy/Heapy

我刚刚安装了孔雀鱼0.1.10.然后输入Ipython 2.1.0

from guppy import hpy
hp = hpy()
Run Code Online (Sandbox Code Playgroud)

使控制台崩溃,即Windows告诉我,python.exe刚刚崩溃.有没有解决方法?还是一个堆积的替代品?

python windows heapy guppy

5
推荐指数
1
解决办法
2016
查看次数

如何找到 Python 分段错误的真正原因

Python脚本生成分段错误我找不到问题的根源。如何在 Python 中简单地调试段错误?是否有推荐的编码实践来避免分段错误?

我编写了一个脚本(1600 行)来系统地从源下载 CSV 文件并格式化收集的数据。该脚本对于 100-200 个文件非常有效,但一段时间后它会系统性地崩溃并显示分段错误消息。
- 崩溃总是发生在脚本中的同一位置,没有可理解的原因 - 我在 Mac OSX 上运行它,但崩溃也会发生在 Ubuntu Linux 和 Debian 9 上 - 如果我运行在单个文件上的脚本期间崩溃的 Pandas 例程,他们工作正常。仅当我循环脚本 100-200 次时才会发生崩溃。-我检查了每个变量内容、构造函数(init),它们似乎都很好。

代码太长,无法粘贴,但按需提供

预期的结果应该是执行到底。相反,它会在 100-200 次迭代后崩溃

python segmentation-fault dataframe

5
推荐指数
0
解决办法
3656
查看次数

如何诊断 Python 程序中潜在的内存泄漏?

我有一个带有 256MB RAM 的嵌入式 Linux 系统。有一个大型代码库在其上运行,大多数使用 C++,但一些实用程序使用 Python。我们有一个 Python“包管理器”,它使用Python apt 模块处理系统更新(我们将更新分发为 .deb 文件)。运行时,此应用程序使用系统 RAM 的很大一部分。我正在使用 top 监视 RAM 使用情况,查看 Python 进程的 RSS(也许这不是分析进程内存使用情况的有效方法?向建议开放)。

线

    缓存 = apt.Cache() 

定期调用以检查系统状态似乎每次调用都会消耗大约 20MB,并且看起来没有返回此内存。我尝试在函数末尾删除缓存对象并运行 gc.collect(),这似乎没有多大帮助。

如何减少此程序的内存使用量?

平台为ARM Cortex A8,运行Linux 3.2、Debian Wheezy和Python 2.7.3。

python linux memory-management

2
推荐指数
1
解决办法
2100
查看次数