为啥我的代码这么慢?

Posted

技术标签:

【中文标题】为啥我的代码这么慢?【英文标题】:Why is my code so slow?为什么我的代码这么慢? 【发布时间】:2014-04-01 22:08:31 【问题描述】:

我是 cProfile 的新手。

我在我的程序上运行了 cProfile,它吐出了这个:

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1  290.732  290.732  313.069  313.069 newad.py:1(<module>)

newad.py 的第一行是:

1  from datetime import date

这条线应该花这么多时间吗?我能做些什么呢?

【问题讨论】:

您是如何运行 cProfile 的?您的模块是否包含除导入语句以外的任何内容? @PeterGibson 我再次运行 cProfile。这一次它将导入语句确定为花费的时间最多。我正在编辑问题。 如果这个结果被认为是“错误的”,你期望或希望得到什么结果? @PeterGibson 当然,模块中还有其他代码,但 cProfile 说其余的运行时间可以忽略不计。 @Deestan 我希望这条线路花费的时间少于 290 秒。但是,我不知道这是否是从日期时间导入日期的典型情况。这是我第一次在我的代码上运行 cProfile。 【参考方案1】:

cProfile 只是向您显示在该模块中花费的时间。行号似乎只是表示该模块中处理的第一条语句 - 因为您有一个多行文档字符串,它显示了文档字符串的最后一行。

"""
Test module for cProfile stats

"""



import time

def wait(t):
    time.sleep(t)

wait(5)

给予:

   $ python -m cProfile test.py
         4 function calls in 5.002 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    5.001    5.001 test.py:10(wait)
        1    0.001    0.001    5.002    5.002 test.py:4(<module>)
        1    0.000    0.000    0.000    0.000 method 'disable' of '_lsprof.Profiler' objects
        1    5.001    5.001    5.001    5.001 time.sleep

请注意,第一行显示在函数 wait 中花费的时间,而第二行显示在模块中花费的时间。

【讨论】:

谢谢!我快要疯了,想弄清楚为什么这不起作用。现在来优化模块内的代码...

以上是关于为啥我的代码这么慢?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Tkinter 窗口打开这么慢?

为啥 Moose 代码这么慢?

Node - 为啥我的 gif 在使用 GifEncoder 时这么慢

我为类编写了这个汉明编码代码。为啥这么慢?

为啥我的分拣程序这么慢? (java中的基数/桶排序)

为啥videoview这么慢?