Python分析:"方法'民意调查' ' select.poll'对象&#34 ;?

时间:2016-09-04 05:20:01

标签: python methods profiling

我使用python' s cProfile模块描述了我的python代码并获得了以下结果:

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
 13937860 96351.331    0.007 96351.331    0.007 {method 'poll' of 'select.poll' objects}
 13930480  201.012    0.000  201.012    0.000 {built-in method posix.read}
 13937860  180.207    0.000 97129.916    0.007 connection.py:897(wait)
 13937860  118.066    0.000 96493.283    0.007 selectors.py:356(select)
  6968925   86.243    0.000 97360.129    0.014 queues.py:91(get)
 13937860   76.067    0.000  194.402    0.000 selectors.py:224(register)
 13937860   64.667    0.000 97194.582    0.007 connection.py:413(_poll)
 13930480   64.365    0.000  279.040    0.000 connection.py:374(_recv)
31163538/17167548   64.083    0.000  106.596    0.000 records.py:230(__getattribute__)
 13937860   57.454    0.000  264.845    0.000 selectors.py:341(register)
...

显然,我的程序大部分时间都花在method 'poll' of 'select.poll' objects上。但是,我不知道何时以及为什么调用此方法以及我必须在程序中更改以减少这些方法调用。

那么,我可以寻找什么来避免代码中出现这个瓶颈?

我在Linux服务器上使用64位python 3.5和numpy以及sharedmem

3 个答案:

答案 0 :(得分:1)

在做了一些实验之后我发现了:我的程序用sharedmem的并行映射方法完成了大部分工作:

with sharedmem.MapReduce() as pool:
    pool.map(myMethod, argumentList)

但是,myMethod不会出现在配置文件日志中的任何位置。此外,没有正确地分析来自myMethod内部的方法。相反,程序在myMethod中花费的所有时间都在日志中的method 'poll' of 'select.poll' objects下。也就是说,分析对于sharedmem的map方法不起作用,我必须找到一种不同的方法来优化我的程序。

答案 1 :(得分:1)

ProcessPoolExecutor未捕获在不同进程内执行的方法(例如,使用cProfile)。所以select.poll只是显示你的主进程在等待其他进程的结果。

答案 2 :(得分:0)

它是python库的一部分。它用于从I / O读取事件。根据定义,它将等待事件,因此需要更长时间。不是你应该改变的东西。