我正在尝试加速我的django项目中的视图。使用https://code.djangoproject.com/wiki/ProfilingDjango中的脚本,我产生了以下输出,前3位占我总时间的57%。
ncalls tottime percall cumtime percall filename:lineno(function)
11 2.898 0.263 2.898 0.263 /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py:406(readline)
1 0.340 0.340 0.343 0.343 /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py:537(create_connection)
37587 0.305 0.000 0.346 0.000 /Users/nai/.virtualenvs/tripconomics/lib/python2.7/posixpath.py:130(islink)
之前我没有做过太多的python /应用程序代码优化。我该如何理解这一点,并试图让整个时间下降?
答案 0 :(得分:2)
您的数据描述了调用给定函数的次数以及在该函数中花费了多少时间。
因此,这告诉您socket.py
花费了大量时间。具体来说,readline
被称为几次,每次都需要相当长的时间。 create_connection
仅被调用一次,但这比调用readline
所需的时间更长。在posixpath.py
内,islink
被称为大量时间,但每次都需要很短的时间
鉴于create_connection
只被调用一次(这是有道理的),你可能没有太多可以改变它。
你可以通过弄清楚调用函数的时间来减少调用readline
的次数,并且当一个人满足时,可以更改代码以避免多次调用readline
,但是我可以没有足够的代码知识来说明这是否可行。
您似乎很可能会减少对islink
的通话,但这只会对速度产生微小的影响。
真正唯一可以显着提高代码速度的方法是减少readline
次调用,这样我就可以专注于确定何时调用它并最小化这些调用。
答案 1 :(得分:0)
这表明您有11次调用readline需要花费将近3秒的时间。如果你要降低它,你需要停止做(或做更少)你做的任何I / O(我假设,打开文件并解析行)。