如何调试函数使用的时间?

时间:2017-07-20 09:41:49

标签: python pandas ipython jupyter-notebook

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

%%time
df = pd.read_csv(data_file)

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

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

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

我想看看我能做些什么来改善阅读过程,但我不知道如何调查read_csv函数内部的时间。

修改:感谢Ori的回答,我可以发现大部分时间花在了Pandas的internals.py _stack_arrays()方法和{{1}上调用对象read。熊猫是否计算了柱子类型?我尝试提供类型的字典,加载时间减少到3分钟。

1 个答案:

答案 0 :(得分:1)

我会为这种情况提供一个分析器。

  

分析Python程序正在进行动态分析测量   程序的执行时间以及构成它的所有内容。那   意味着测量每个功能所花费的时间。这将   为您提供有关您的计划花费时间以及区域的数据   可能值得优化。

例如,您可以使用cProfile库。可以找到扩展说明here