6

我试图使用 cProfile 对我的代码进行性能测试,但遗憾的是,无论我如何尝试 cProfile 都拒绝正常运行。这是我所做的:

import cProfile
cProfile.run('addNum()')  # addNum() is a very simple function that adds a bunch of 
                          # numbers into a dictionary

这就是我得到的:

Traceback (most recent call last):
File "C:\Program Files\Wing IDE 101 4.1\src\debug\tserver\_sandbox.py", line 1, in <module>
# Used internally for debug sandbox under external interpreter
File "C:\Python27\Lib\cProfile.py", line 36, in run
result = prof.print_stats(sort)
File "C:\Python27\Lib\cProfile.py", line 81, in print_stats
pstats.Stats(self).strip_dirs().sort_stats(sort).print_stats()
File "C:\Python27\Lib\pstats.py", line 81, in __init__
self.init(arg)
File "C:\Python27\Lib\pstats.py", line 95, in init
self.load_stats(arg)
File "C:\Python27\Lib\pstats.py", line 124, in load_stats
self.__class__, arg)
TypeError: Cannot create or construct a <class pstats.Stats at 0x01AE9CA8> object from '<cProfile.Profile object at 0x01ACC470>''

有人可以帮我调试一下,并希望提供解决方案吗?

我在 Wing IDE 101 ver4.1 上运行 Python 2.7.3。

谢谢!!!

4

2 回答 2

2

这似乎是 pStats 模块而不是 cProfile 的问题。

你能试试吗

import pstats

如果这说无法导入 pstats,请尝试再次安装 python-profiler。它带有 python 本身,但如果 pstats 不存在,在你的情况下可能会搞砸。

这是 linux 上的一个简单的 apt-get,所以我假设 windows 也会有一个单独的用于 python-profiler 的二进制文件。

希望这可以帮助!

于 2012-07-03T06:35:13.920 回答
0

我今天在 Python 3.5.2 上遇到了同样的问题:

最终的工作是替换我想像这样分析的调用,然后运行整个程序:

import cProfile
# myObject.myFunc()
cProfile.runctx('myObject.myFunc()', globals(), locals(), 'myFunc.stat')

最后,在单独运行的交互式中python3,我做了:

>>> import pstats
>>> p = pstats.Stats('myFunc.stat')
>>> p.strip_dirs().sort_stats(-1).print_stats()
Wed Feb 20 17:10:05 2019    myFunc.stat

         10218759 function calls (3916491 primitive calls) in 16.519 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000   16.519   16.519 <string>:1(<module>)
   ... the really useful stats followed here ...

, cProfile.runctx(...),是解决我遇到globals()的问题所必需的;你问的问题是通过指定一个文件名来存储统计数据的,这也可以通过普通的locals()NameErrorTypeErrorcProfile.run(...)

于 2019-02-21T10:10:53.217 回答