2016-09-04 34 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方法不一致,我必須找到一種不同的方式來優化我的程序。

相關問題