Issue #20505: Improve debug info in asyncio event loop

This commit is contained in:
Victor Stinner 2014-02-11 10:08:08 +01:00
parent fea7e7336f
commit 7bff8e1e2b
1 changed files with 18 additions and 5 deletions

View File

@ -634,12 +634,25 @@ class BaseEventLoop(events.AbstractEventLoop):
else: else:
logger.log(level, 'poll took %.3f seconds', t1-t0) logger.log(level, 'poll took %.3f seconds', t1-t0)
else: else:
t0 = self.time() t0_monotonic = time.monotonic()
t0 = time.perf_counter()
event_list = self._selector.select(timeout) event_list = self._selector.select(timeout)
dt = self.time() - t0 dt = time.perf_counter() - t0
if not event_list and timeout and dt < timeout: dt_monotonic = time.monotonic() - t0_monotonic
print("asyncio: selector.select(%.3f ms) took %.3f ms" if not event_list and timeout: # and dt < timeout:
% (timeout*1e3, dt*1e3), selector = self._selector.__class__.__name__
if (selector.startswith(("Poll", "Epoll", "Iocp"))
or timeout > 1e-3 or dt > 1e-3):
unit, factor = "ms", 1e3
else:
unit, factor = "us", 1e6
print("asyncio: %s.select(%.3f %s) took %.3f %s"
" (monotonic: %.3f %s, clock res: %.3f %s)"
% (self._selector.__class__.__name__,
timeout * factor, unit,
dt * factor, unit,
dt_monotonic * factor, unit,
self._clock_resolution * factor, unit),
file=sys.__stderr__, flush=True) file=sys.__stderr__, flush=True)
self._process_events(event_list) self._process_events(event_list)