我已经使用python的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位python3.5和numpy和sharedmem。
发布于 2018-06-01 07:16:29
cProfile
不会捕获在不同进程中执行的方法(例如,使用ProcessPoolExecutor
)。因此,select.poll
只是显示您的主进程正在等待其他进程的结果。
发布于 2016-09-04 13:34:48
它是python库的一部分。它用于从I/O读取事件。根据定义,它将等待事件,因此需要更长的时间。这不是你应该改变的。
https://stackoverflow.com/questions/39313762
复制相似问题