2016-09-04 89 views
0

我一直在使用python的cProfile模块异形我的Python代码,并得到以下结果:Python分析:“select.poll”对象的“方法”轮询“是什么?

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

回答

0

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

+0

从I/O中读取事件意味着什么? (我读过select.poll的文档,但它没有帮助我。)I/O(单独)是指读取/写入文件和命令行字符?即使我不能改变方法本身,我也许想改变它被调用的地方/频率。但是,我从来没有明确地在我的代码中调用这个方法。它必须在某个子程序中调用。你有什么猜测这种子程序可以处理什么? – Samufi

+0

通常是文件,但可以是fileno /文件描述符。查看源文件/Python35/Lib/selectors.py – MotKohn

0

做一些实验后,我想通了:我的程序做了大部分工作裹着sharedmem的并行映射方法:

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

然而,myMethod任何地方都不会在配置文件日志中出现。此外,myMethod内的任何方法都不能正确分析。相反,程序花在myMethod上的所有时间都在日志中的method 'poll' of 'select.poll' objects之下。也就是说,profiling与sharedmem的map方法不一致,我必须找到一种不同的方式来优化我的程序。

相关问题