【问题标题】:How to interpret the results of profiling?如何解释分析结果?
【发布时间】:2016-07-06 13:45:27
【问题描述】:

我不是计算机科学家,我一直在努力使我的基于代理的模型相当快(Implementing Pool on a for loop with a lot of inputsMultiprocessing pool example (parallel) is slower than sequential. Trying to understand pool in pythonReturning lists of instances makes no difference? And what about performance?

每个人都一直告诉我要配置文件。我又试了一次,但我不知道如何解释结果(使用timeit 我知道哪个函数更慢,但我无法使用Pool@jit)。

那么鉴于以下结果,我应该如何进行? 非常感谢。

98008290 function calls (96393650 primitive calls) in 568.193 seconds
Ordered by: standard name

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    1    0.000    0.000    0.000    0.000 <decorator-gen-0>:1(<module>)
    1    0.000    0.000    0.000    0.000 <decorator-gen-10>:1(<module>)
    1    0.000    0.000    0.000    0.000 <decorator-gen-11>:1(<module>)
    1    0.000    0.000    0.000    0.000 <decorator-gen-1>:1(<module>)
    6    0.000    0.000    0.006    0.001 <decorator-gen-1>:1(non_reentrant)
    1    0.000    0.000    0.000    0.000 <decorator-gen-2>:1(<module>)
    1    0.000    0.000    0.000    0.000 <decorator-gen-3>:1(<module>)
    1    0.000    0.000    0.000    0.000 <decorator-gen-4>:1(<module>)
    1    0.000    0.000    0.000    0.000 <decorator-gen-5>:1(<module>)
    1    0.000    0.000    0.000    0.000 <decorator-gen-6>:1(<module>)
    1    0.000    0.000    0.000    0.000 <decorator-gen-7>:1(<module>)
    1    0.000    0.000    0.000    0.000 <decorator-gen-8>:1(<module>)
    3    0.000    0.000    0.002    0.001 <decorator-gen-8>:1(_held_figure)
    1    0.000    0.000    0.000    0.000 <decorator-gen-9>:1(<module>)
 1416    0.003    0.000    0.003    0.000 <frozen importlib._bootstrap>:1000(__init__)
    2    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:1003(module_repr)
 1245    0.034    0.000    0.166    0.000 <frozen importlib._bootstrap>:1019(init_module_attrs)
 1245    0.011    0.000    0.209    0.000 <frozen importlib._bootstrap>:1099(create)
 1245/32    0.008    0.000   23.613    0.738 <frozen importlib._bootstrap>:1122(_exec)
 169/105    0.003    0.000    4.104    0.039 <frozen importlib._bootstrap>:1156(_load_backward_compatible)
 1414/32    0.034    0.000   23.620    0.738 <frozen importlib._bootstrap>:1186(_load_unlocked)
   15    0.000    0.000    0.002    0.000 <frozen importlib._bootstrap>:1223(_fix_up_module)
 1650    0.002    0.000    0.006    0.000 <frozen importlib._bootstrap>:1266(find_spec)
   19    0.000    0.000    0.006    0.000 <frozen importlib._bootstrap>:1287(load_module)
 1245    0.019    0.000    0.019    0.000 <frozen importlib._bootstrap>:129(_new_module)
   19    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:1311(is_package)
 1631    0.004    0.000    0.009    0.000 <frozen importlib._bootstrap>:1336(find_spec)
 1631    0.022    0.000    0.254    0.000 <frozen importlib._bootstrap>:1401(_open_registry)
 1631    0.034    0.000    0.307    0.000 <frozen importlib._bootstrap>:1408(_search_registry)
  139    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:141(__init__)
 1631    0.006    0.000    0.314    0.000 <frozen importlib._bootstrap>:1423(find_spec)
  139    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:144(__enter__)
  1245/32    0.022    0.000   23.612    0.738 <frozen importlib._bootstrap>:1465(exec_module)
  139    0.001    0.000    0.003    0.000 <frozen importlib._bootstrap>:147(__exit__)
  556    0.001    0.000    0.001    0.000 <frozen importlib._bootstrap>:148(<genexpr>)
 1245    0.055    0.000    2.437    0.002 <frozen importlib._bootstrap>:1534(get_code)
 1245    0.008    0.000    0.008    0.000 <frozen importlib._bootstrap>:1591(__init__)
 1245    0.001    0.000    0.001    0.000 <frozen importlib._bootstrap>:1616(get_filename)
 1245    0.941    0.001    1.037    0.001 <frozen importlib._bootstrap>:1621(get_data)
 1245    0.011    0.000    0.384    0.000 <frozen importlib._bootstrap>:1631(path_stats)
  120    0.001    0.000    0.001    0.000 <frozen importlib._bootstrap>:1697(__init__)
  120/92    0.004    0.000    4.087    0.044 <frozen importlib._bootstrap>:1708(load_module)
 1888    0.017    0.000    0.066    0.000 <frozen importlib._bootstrap>:172(__init__)
  120    0.001    0.000    0.006    0.000 <frozen importlib._bootstrap>:1726(is_package)
  240    0.001    0.000    0.001    0.000 <frozen importlib._bootstrap>:1729(<genexpr>)
  181    0.058    0.000    0.128    0.001 <frozen importlib._bootstrap>:1853(_path_hooks)
 2614    0.012    0.000    0.142    0.000 <frozen importlib._bootstrap>:1870(_path_importer_cache)
  135    0.002    0.000    0.461    0.003 <frozen importlib._bootstrap>:1887(_legacy_get_spec)
 1631    0.035    0.000    2.252    0.001 <frozen importlib._bootstrap>:1902(_get_spec)
 2857    0.033    0.000    0.035    0.000 <frozen importlib._bootstrap>:192(acquire)
 1631    0.009    0.000    2.261    0.001 <frozen importlib._bootstrap>:1934(find_spec)
  179    0.006    0.000    0.012    0.000 <frozen importlib._bootstrap>:1979(__init__)
 1253    0.001    0.000    0.001    0.000 <frozen importlib._bootstrap>:1985(<genexpr>)
 1365    0.016    0.000    0.055    0.000 <frozen importlib._bootstrap>:2011(_get_spec)
 2335    0.118    0.000    1.603    0.001 <frozen importlib._bootstrap>:2016(find_spec)
  178    0.016    0.000    0.100    0.001 <frozen importlib._bootstrap>:2061(_fill_cache)
  178    0.003    0.000    0.004    0.000 <frozen importlib._bootstrap>:2090(<setcomp>)
  179    0.002    0.000    0.071    0.000 <frozen importlib._bootstrap>:2102(path_hook_for_FileFinder)
 7719    0.012    0.000    0.017    0.000 <frozen importlib._bootstrap>:2120(__enter__)
 7719    0.013    0.000    0.020    0.000 <frozen importlib._bootstrap>:2124(__exit__)
 1176    0.007    0.000    0.019    0.000 <frozen importlib._bootstrap>:2138(_find_spec_legacy)
1650/1648    0.097    0.000    2.739    0.002 <frozen importlib._bootstrap>:2147(_find_spec)
 2857    0.031    0.000    0.033    0.000 <frozen importlib._bootstrap>:217(release)
  216    0.001    0.000    0.001    0.000 <frozen importlib._bootstrap>:2187(_sanity_check)
 1730/92    0.045    0.000   23.736    0.258 <frozen importlib._bootstrap>:2207(_find_and_load_unlocked)
 1730/92    0.057    0.000   23.753    0.258 <frozen importlib._bootstrap>:2234(_find_and_load)
 216/214    0.004    0.000    0.051    0.000 <frozen importlib._bootstrap>:2240(_gcd_import)
338220/334774    1.206    0.000   10.385    0.000 <frozen importlib._bootstrap>:2264(_handle_fromlist)
108/107    0.001    0.000    0.052    0.000 <frozen importlib._bootstrap>:2322(__import__)
 1730    0.006    0.000    0.006    0.000 <frozen importlib._bootstrap>:257(__init__)
 1730    0.017    0.000    0.134    0.000 <frozen importlib._bootstrap>:261(__enter__)
 1730    0.007    0.000    0.033    0.000 <frozen importlib._bootstrap>:268(__exit__)
 2857    0.040    0.000    0.106    0.000 <frozen importlib._bootstrap>:274(_get_module_lock)
 1888    0.003    0.000    0.003    0.000 <frozen importlib._bootstrap>:288(cb)
 1127    0.011    0.000    0.044    0.000 <frozen importlib._bootstrap>:293(_lock_unlock_module)
 2335    0.007    0.000    0.007    0.000 <frozen importlib._bootstrap>:30(_relax_case)
 1804/32    0.007    0.000   23.649    0.739 <frozen importlib._bootstrap>:313(_call_with_frames_removed)
 2490    0.035    0.000    0.140    0.000 <frozen importlib._bootstrap>:437(cache_from_source)
 2490    0.008    0.000    0.014    0.000 <frozen importlib._bootstrap>:45(_r_long)
 9163    0.047    0.000    0.132    0.000 <frozen importlib._bootstrap>:50(_path_join)
 9990    0.024    0.000    0.024    0.000 <frozen importlib._bootstrap>:518(_verbose_message)
 9163    0.050    0.000    0.071    0.000 <frozen importlib._bootstrap>:52(<listcomp>)
 1365/1155    0.007    0.000    4.094    0.004 <frozen importlib._bootstrap>:534(_check_name_wrapper)
   38    0.000    0.000    0.006    0.000 <frozen importlib._bootstrap>:546(_requires_builtin_wrapper)
 2618    0.042    0.000    0.063    0.000 <frozen importlib._bootstrap>:56(_path_split)
 1245    0.055    0.000    0.070    0.000 <frozen importlib._bootstrap>:599(_validate_bytecode_header)
 1245    0.017    0.000    0.823    0.001 <frozen importlib._bootstrap>:654(_compile_bytecode)
 5307    0.020    0.000    1.598    0.000 <frozen importlib._bootstrap>:68(_path_stat)
    2    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:690(_module_repr)
 1245    0.003    0.000    0.003    0.000 <frozen importlib._bootstrap>:728(__init__)
 1245    0.004    0.000    0.004    0.000 <frozen importlib._bootstrap>:732(__enter__)
 1245    0.017    0.000    0.032    0.000 <frozen importlib._bootstrap>:739(__exit__)
 4980    0.005    0.000    0.005    0.000 <frozen importlib._bootstrap>:742(<genexpr>)
 1727    0.014    0.000    0.597    0.000 <frozen importlib._bootstrap>:78(_path_is_mode_type)
 1801    0.016    0.000    0.016    0.000 <frozen importlib._bootstrap>:790(__init__)
 2490    0.017    0.000    0.104    0.000 <frozen importlib._bootstrap>:824(cached)
 1245    0.008    0.000    0.010    0.000 <frozen importlib._bootstrap>:842(parent)
 1247    0.001    0.000    0.001    0.000 <frozen importlib._bootstrap>:850(has_location)
49/48    0.001    0.000    0.464    0.010 <frozen importlib._bootstrap>:859(spec_from_loader)
 1547    0.006    0.000    0.547    0.000 <frozen importlib._bootstrap>:87(_path_isfile)
 1395    0.020    0.000    0.487    0.000 <frozen importlib._bootstrap>:884(spec_from_file_location)
  180    0.001    0.000    0.057    0.000 <frozen importlib._bootstrap>:92(_path_isdir)
    1    0.000    0.000    0.000    0.000 <string>:1(<module>)
    1    0.000    0.000    0.000    0.000 <string>:1(error)
    1    0.000    0.000    0.000    0.000 <string>:11(com_error)
  313    0.001    0.000    0.001    0.000 <string>:12(__new__)
    1    0.000    0.000    0.000    0.000 <string>:2(<module>)
    1    0.000    0.000    0.000    0.000 <string>:2(__init__)
    4    0.000    0.000    0.000    0.000 <string>:2(_parse_args)
    1    0.000    0.000    0.000    0.000 <string>:5(AndersonResult)
    1    0.000    0.000    0.000    0.000 <string>:5(Anderson_ksampResult)
    1    0.000    0.000    0.000    0.000 <string>:5(AnsariResult)
    1    0.000    0.000    0.000    0.000 <string>:5(ArgInfo)
    1    0.000    0.000    0.000    0.000 <string>:5(ArgSpec)
    1    0.000    0.000    0.000    0.000 <string>:5(Arguments)
    1    0.000    0.000    0.000    0.000 <string>:5(ArrayFormula)
    1    0.000    0.000    0.000    0.000 <string>:5(Attribute)
    1    0.000    0.000    0.000    0.000 <string>:5(BartlettResult)
    1    0.000    0.000    0.000    0.000 <string>:5(BinnedStatistic2dResult)
    1    0.000    0.000    0.000    0.000 <string>:5(FlignerResult)
    1    0.000    0.000    0.000    0.000 <string>:5(Formula)
    1    0.002    0.002    0.002    0.002 <string>:5(FriedmanchisquareResult)
    1    0.000    0.000    0.000    0.000 <string>:5(FullArgSpec)
    1    0.000    0.000    0.000    0.000 <string>:5(FunctionAttributes)
    1    0.000    0.000    0.000    0.000 <string>:5(HistogramResult)
19424    2.346    0.000    2.346    0.000 {pandas.algos.take_2d_axis1_object_object}
82904    0.318    0.000    0.318    0.000 {pandas.index.get_value_at}
  199    0.051    0.000    0.051    0.000 {pandas.lib.clean_index_list}
   57    0.002    0.000    0.002    0.000 {pandas.lib.get_blkno_indexers}
 2918    0.095    0.000    0.095    0.000 {pandas.lib.infer_dtype}
   38    0.001    0.000    0.001    0.000 {pandas.lib.is_bool_array}
   76    0.000    0.000    0.000    0.000 {pandas.lib.is_bool}
166001    0.169    0.000    0.169    0.000 {pandas.lib.is_float}
249112    0.215    0.000    0.215    0.000 {pandas.lib.is_integer}
   20    0.000    0.000    0.000    0.000 {pandas.lib.is_timedelta_array}
   38    0.002    0.000    0.002    0.000 {pandas.lib.isnullobj}
414822    1.023    0.000    1.023    0.000 {pandas.lib.isscalar}
   11    0.054    0.005    0.054    0.005 {pandas.lib.maybe_convert_numeric}
   56    0.006    0.000    0.006    0.000 {pandas.lib.maybe_convert_objects}
    3    0.000    0.000    0.018    0.006 {pandas.lib.reduce}
   65    0.009    0.000    0.105    0.002 {pandas.lib.scalar_compare}
   28    0.001    0.000    0.001    0.000 {pandas.lib.to_object_array_tuples}
415734    2.533    0.000    4.116    0.000 {pandas.lib.values_from_object}
   20    0.000    0.000    0.000    0.000 {pandas.tslib.is_timestamp_array}
   48    0.001    0.000    0.001    0.000 {reduce.nansum}

【问题讨论】:

  • 就这些了吗?代码是否使用了多处理或探查器可能“无法触及”的东西?我原以为“tottime”的总和应该与总时间(568.193)大致相同,但这里似乎并非如此。
  • ncalls 告诉您该函数被调用的频率,tottime 在该函数中花费的总时间。您将希望忽略所有内置的装饰器和 importlib 调用,因为您可能一开始就无法对它们做太多事情,而且它们最终也不会占用太多资源。查看调用次数最多且总时间最长的函数,您就会知道程序将所有时间都花在了哪里。现在尝试减少该时间和/或呼叫次数。
  • @deceze 看起来函数调用的总时间最多为 2.5 秒(pandas.lib.values_from_object)。因此,即使您删除该函数调用,也不应该最多加快应用程序 2.5 秒的速度吗?与大约 10 分钟的总时间相比,这似乎并没有做那么多?程序在哪里花了这么多时间,还是我误读了输出?
  • 是的,就这个配置文件而言(它似乎遗漏了一些东西)你的程序很好——对于大多数函数来说,不到千分之一秒,即使是数千个函数的总时间也很短调用次数——地狱,_handle_fromlist from 运行了 338,000 次(其中只有 4000 次不是递归的),并且在它自己和它调用的东西之间总共花费了 10 秒。
  • 如果我没看错的话,总共只需要 4 秒。所以这不应该是你的问题。您可以通过python -m cProfile -o outputfile main.py 将分析信息保存到文件中,以查看您的终端是否在其中剪切了一些信息?如果你说你定义了一个没有出现的函数,我猜是有问题。

标签: python performance profile


【解决方案1】:

我还推荐flamegraphs 来解释分析结果。它特别适用于PyFlame,它是一个 PTracing 分析器(它的开销最小)。

火焰图如下所示:

【讨论】:

    【解决方案2】:

    您可能想要使用一些可用的工具来分析/可视化 cProfile 输出,例如 pstatsRunShakeRun

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多