]> granicus.if.org Git - python/commitdiff
asyncio: sync with Tulip
authorVictor Stinner <victor.stinner@gmail.com>
Fri, 11 Jul 2014 09:58:33 +0000 (11:58 +0200)
committerVictor Stinner <victor.stinner@gmail.com>
Fri, 11 Jul 2014 09:58:33 +0000 (11:58 +0200)
* 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

Lib/asyncio/base_events.py
Lib/asyncio/streams.py
Lib/asyncio/tasks.py
Lib/test/test_asyncio/test_base_events.py
Lib/test/test_asyncio/test_events.py
Lib/test/test_asyncio/test_tasks.py

index f6d7a58f5e07de55aa140b7da74a00632cfe9b44..3951fb75b47bc98cadbae9aa1f90c84b5371ff8f 100644 (file)
@@ -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)
index 9bde218bfa4983c73f5ec1f25bc00cb4fca637ff..9b654cdbb451b05d0df60d7ab1d8a47b85d544ff 100644 (file)
@@ -14,7 +14,6 @@ from . import coroutines
 from . import events
 from . import futures
 from . import protocols
-from . import tasks
 from .coroutines import coroutine
 
 
index 3d7e5a433344ae3602c1ba7e99506bac4a9cf911..78b4c4dcfdd9892f7578ba4cde514ffdaeae9667 100644 (file)
@@ -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))
 
index f6da7c375ef2418cf7214b44d695d5d7cdb05f55..27610f0d8108febf4b9f38e2f5dcaeb815cf524c 100644 (file)
@@ -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):
index e04c2876336b6cf3ca82ae300e170c91ec240958..06552f874f8bca4825f8184206b2b8236c4460f3 100644 (file)
@@ -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)
index 85648dc4cee02e7bbd4ee8e15664fc9f8a9b2975..ca770f909e610f9c001c57518162dc8353c96e45 100644 (file)
@@ -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))