[Python-checkins] cpython (merge 3.6 -> 3.6): Merge heads

yury.selivanov python-checkins at python.org
Thu Sep 15 13:27:47 EDT 2016


https://hg.python.org/cpython/rev/c8e26dd7fd97
changeset:   103817:c8e26dd7fd97
branch:      3.6
parent:      103812:968c328d9032
parent:      103815:4333047bbefa
user:        Yury Selivanov <yury at magic.io>
date:        Thu Sep 15 13:26:58 2016 -0400
summary:
  Merge heads

files:
  Lib/asyncio/base_events.py |  24 ++++++++++++++++--------
  1 files changed, 16 insertions(+), 8 deletions(-)


diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py
--- a/Lib/asyncio/base_events.py
+++ b/Lib/asyncio/base_events.py
@@ -242,9 +242,13 @@
         self._task_factory = None
         self._coroutine_wrapper_set = False
 
-        # A weak set of all asynchronous generators that are being iterated
-        # by the loop.
-        self._asyncgens = weakref.WeakSet()
+        if hasattr(sys, 'get_asyncgen_hooks'):
+            # Python >= 3.6
+            # A weak set of all asynchronous generators that are
+            # being iterated by the loop.
+            self._asyncgens = weakref.WeakSet()
+        else:
+            self._asyncgens = None
 
         # Set to True when `loop.shutdown_asyncgens` is called.
         self._asyncgens_shutdown_called = False
@@ -359,7 +363,9 @@
         """Shutdown all active asynchronous generators."""
         self._asyncgens_shutdown_called = True
 
-        if not len(self._asyncgens):
+        if self._asyncgens is None or not len(self._asyncgens):
+            # If Python version is <3.6 or we don't have any asynchronous
+            # generators alive.
             return
 
         closing_agens = list(self._asyncgens)
@@ -387,9 +393,10 @@
             raise RuntimeError('Event loop is running.')
         self._set_coroutine_wrapper(self._debug)
         self._thread_id = threading.get_ident()
-        old_agen_hooks = sys.get_asyncgen_hooks()
-        sys.set_asyncgen_hooks(firstiter=self._asyncgen_firstiter_hook,
-                               finalizer=self._asyncgen_finalizer_hook)
+        if self._asyncgens is not None:
+            old_agen_hooks = sys.get_asyncgen_hooks()
+            sys.set_asyncgen_hooks(firstiter=self._asyncgen_firstiter_hook,
+                                   finalizer=self._asyncgen_finalizer_hook)
         try:
             while True:
                 self._run_once()
@@ -399,7 +406,8 @@
             self._stopping = False
             self._thread_id = None
             self._set_coroutine_wrapper(False)
-            sys.set_asyncgen_hooks(*old_agen_hooks)
+            if self._asyncgens is not None:
+                sys.set_asyncgen_hooks(*old_agen_hooks)
 
     def run_until_complete(self, future):
         """Run until the Future is done.

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list