如何理解我的代码的哪一部分花费的时间最多?
Posted
技术标签:
【中文标题】如何理解我的代码的哪一部分花费的时间最多?【英文标题】:How to understand which part of my code is taking the most time? 【发布时间】:2021-12-01 09:34:50 【问题描述】:我已经在 Python 中实现了一个使用蒙特卡罗模拟的代码,但即使在 N=1000 时也需要太多时间。我有两个问题:
现在我在 Notebook 上运行它,在我的电脑上的 Pycharm 上运行它会提高性能吗?
如何了解我的代码的哪一部分花费的时间最多?例如,我想知道:您的代码在这个 for 循环中花费了 x% 的时间,在另一个 for 循环中花费了 y%。
编辑:
代码尤其是用于评估扑克牌的赔率,所以我模拟了很多棋盘,并且每次都评估哪一手牌更好。
【问题讨论】:
您可以添加您的代码吗?我倾向于使用时间模块,并在我的代码中的不同位置调用 t1 = time.time() 来计算每个位需要多长时间。我也相信有一个 timeit 模块也可以用来计时 您是否尝试过为您希望花费更多时间的特定代码位置计时? 试试profilehooks 我们真的无法回答第一个问题——您的笔记本运行在 some 计算机上,而您的 PyCharm 运行在 some 计算机上。在不知道任何一个的情况下,我们不能说哪个更快,或者它们是否甚至不同。许多 Monte Carlos 模拟不应由 Notebook 或 Pycharm 运行,而应由裸 Python 可执行文件运行,甚至可能通过批处理系统或类似系统运行。 至于第二个:你描述的叫profiling。有很多选择。 【参考方案1】:在 Python 的标准库中有一对用于分析代码的模块 - 请参阅 How can you profile a Python script?
还有许多可用的第三方模块可以为您提供更细粒度的代码执行视图 — 请参阅 How do I use line_profiler (from Robert Kern)?
我自己没有尝试过,但profilehooks 看起来也很有前途且易于使用。
【讨论】:
以上是关于如何理解我的代码的哪一部分花费的时间最多?的主要内容,如果未能解决你的问题,请参考以下文章
Google Cloud Profiling 如何通过分析优化我的代码?