summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2014-07-11 11:58:52 +0200
committerVictor Stinner <victor.stinner@gmail.com>2014-07-11 11:58:52 +0200
commit39578d8510db1eb48facf45ca24c2c7751d6dbdf (patch)
treef1cbbf45d33c3e77bd5f0ba74c7d69e122f08d07
parent8934961da800107462544b1c432cd9f01887d7fe (diff)
parent770e48d0174726e339074cfffa68fce23768aab5 (diff)
downloadcpython-git-39578d8510db1eb48facf45ca24c2c7751d6dbdf.tar.gz
(Merge 3.4) asyncio: sync with Tulip
* Tulip issue #182: Improve logs of BaseEventLoop._run_once() - Don't log non-blocking poll - Only log polling with a timeout if it gets events or if it timed out after more than 1 second. * Fix some pyflakes warnings: remove unused imports
-rw-r--r--Lib/asyncio/base_events.py21
-rw-r--r--Lib/asyncio/streams.py1
-rw-r--r--Lib/asyncio/tasks.py1
-rw-r--r--Lib/test/test_asyncio/test_base_events.py2
-rw-r--r--Lib/test/test_asyncio/test_events.py2
-rw-r--r--Lib/test/test_asyncio/test_tasks.py9
6 files changed, 20 insertions, 16 deletions
diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py
index f6d7a58f5e..3951fb75b4 100644
--- a/Lib/asyncio/base_events.py
+++ b/Lib/asyncio/base_events.py
@@ -882,19 +882,26 @@ class BaseEventLoop(events.AbstractEventLoop):
when = self._scheduled[0]._when
timeout = max(0, when - self.time())
- if self._debug:
+ if self._debug and timeout != 0:
t0 = self.time()
event_list = self._selector.select(timeout)
dt = self.time() - t0
- if dt >= 1:
+ if dt >= 1.0:
level = logging.INFO
else:
level = logging.DEBUG
- if timeout is not None:
- logger.log(level, 'poll %.3f took %.3f seconds',
- timeout, dt)
- else:
- logger.log(level, 'poll took %.3f seconds', dt)
+ nevent = len(event_list)
+ if timeout is None:
+ logger.log(level, 'poll took %.3f ms: %s events',
+ dt * 1e3, nevent)
+ elif nevent:
+ logger.log(level,
+ 'poll %.3f ms took %.3f ms: %s events',
+ timeout * 1e3, dt * 1e3, nevent)
+ elif dt >= 1.0:
+ logger.log(level,
+ 'poll %.3f ms took %.3f ms: timeout',
+ timeout * 1e3, dt * 1e3)
else:
event_list = self._selector.select(timeout)
self._process_events(event_list)
diff --git a/Lib/asyncio/streams.py b/Lib/asyncio/streams.py
index 9bde218bfa..9b654cdbb4 100644
--- a/Lib/asyncio/streams.py
+++ b/Lib/asyncio/streams.py
@@ -14,7 +14,6 @@ from . import coroutines
from . import events
from . import futures
from . import protocols
-from . import tasks
from .coroutines import coroutine
diff --git a/Lib/asyncio/tasks.py b/Lib/asyncio/tasks.py
index 3d7e5a4333..78b4c4dcfd 100644
--- a/Lib/asyncio/tasks.py
+++ b/Lib/asyncio/tasks.py
@@ -18,7 +18,6 @@ from . import coroutines
from . import events
from . import futures
from .coroutines import coroutine
-from .log import logger
_PY34 = (sys.version_info >= (3, 4))
diff --git a/Lib/test/test_asyncio/test_base_events.py b/Lib/test/test_asyncio/test_base_events.py
index f6da7c375e..27610f0d81 100644
--- a/Lib/test/test_asyncio/test_base_events.py
+++ b/Lib/test/test_asyncio/test_base_events.py
@@ -12,7 +12,6 @@ from test.support import IPV6_ENABLED
import asyncio
from asyncio import base_events
-from asyncio import events
from asyncio import constants
from asyncio import test_utils
@@ -26,6 +25,7 @@ class BaseEventLoopTests(test_utils.TestCase):
def setUp(self):
self.loop = base_events.BaseEventLoop()
self.loop._selector = mock.Mock()
+ self.loop._selector.select.return_value = ()
self.set_event_loop(self.loop)
def test_not_implemented(self):
diff --git a/Lib/test/test_asyncio/test_events.py b/Lib/test/test_asyncio/test_events.py
index e04c287633..06552f874f 100644
--- a/Lib/test/test_asyncio/test_events.py
+++ b/Lib/test/test_asyncio/test_events.py
@@ -715,7 +715,7 @@ class EventLoopTestsMixin:
with self.assertRaisesRegex(ValueError,
'path and sock can not be specified '
'at the same time'):
- server = self.loop.run_until_complete(f)
+ self.loop.run_until_complete(f)
def _create_ssl_context(self, certfile, keyfile=None):
sslcontext = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
diff --git a/Lib/test/test_asyncio/test_tasks.py b/Lib/test/test_asyncio/test_tasks.py
index 85648dc4ce..ca770f909e 100644
--- a/Lib/test/test_asyncio/test_tasks.py
+++ b/Lib/test/test_asyncio/test_tasks.py
@@ -1,6 +1,5 @@
"""Tests for tasks.py."""
-import os.path
import re
import sys
import types
@@ -1640,9 +1639,9 @@ class TaskTests(test_utils.TestCase):
asyncio.coroutines._DEBUG = debug
tb_filename = __file__
- tb_lineno = sys._getframe().f_lineno + 1
- coro = coro_noop()
- coro = None
+ tb_lineno = sys._getframe().f_lineno + 2
+ # create a coroutine object but don't use it
+ coro_noop()
support.gc_collect()
self.assertTrue(m_log.error.called)
@@ -1652,7 +1651,7 @@ class TaskTests(test_utils.TestCase):
r'Coroutine object created at \(most recent call last\):\n'
r'.*\n'
r' File "%s", line %s, in test_coroutine_never_yielded\n'
- r' coro = coro_noop\(\)$'
+ r' coro_noop\(\)$'
% (re.escape(coro_noop.__qualname__),
re.escape(func_filename), func_lineno,
re.escape(tb_filename), tb_lineno))