【问题标题】:How can I debug the time used by a function?如何调试函数使用的时间?
【发布时间】:2017-12-25 22:23:55
【问题描述】:

我正在将一个大的 Pandas 数据框加载到内存中。我可以用%%time魔法测量所需的时间:

%%time
df = pd.read_csv(data_file)

CPU times: user 3min 53s, sys: 57.5 s, total: 4min 50s
Wall time: 21min 2s

系统将 CPU 分配给其他进程的时间大约为 16 分钟。我知道我的过程不会占用 100% 的时间 (Difference between CPU time and wall time)。但是,因为这是我专用的虚拟机,所以我猜这 16 分钟的大部分时间都与数据加载任务所涉及的进程有关。

如果我对htop使用的资源进行目视检查,大部分核心都处于空闲状态,系统缓慢增加Swap内存量。我想 Swap 的 I/O 操作占用了大部分时间,但我想确认一下。

我想看看是否可以做些什么来改善阅读过程,但我不知道如何查看在 read_csv 函数中花费的时间。

编辑:感谢 Ori 的回答,我知道大部分时间都花在了 Pandas 的 internals.py _stack_arrays() 方法和对象 pandas.parser.TextReaderread 调用上。 Pandas 是否确定了列类型?我尝试提供带有类型的字典,加载时间减少到 3 分钟。

【问题讨论】:

    标签: python pandas ipython jupyter-notebook


    【解决方案1】:

    对于这种情况,我建议使用分析器。

    分析 Python 程序是在进行动态分析,以衡量 程序的执行时间以及组成它的所有内容。那 意味着测量每个功能所花费的时间。这会 为您提供有关您的程序在哪里花费时间以及哪些区域的数据 可能值得优化。

    例如,您可以使用cProfile 库。扩展解释可以在here找到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-08
      • 2010-09-21
      • 2020-11-26
      相关资源
      最近更新 更多