]> granicus.if.org Git - python/commitdiff
bpo-34323: Enhance IocpProactor.close() log (GH-11555)
authorVictor Stinner <vstinner@redhat.com>
Tue, 15 Jan 2019 10:48:00 +0000 (11:48 +0100)
committerGitHub <noreply@github.com>
Tue, 15 Jan 2019 10:48:00 +0000 (11:48 +0100)
IocpProactor.close() now uses time to decide when to log: wait 1
second before the first log, then log every second. Log also the
number of seconds since close() was called.

Lib/asyncio/windows_events.py
Misc/NEWS.d/next/Library/2019-01-14-17-34-36.bpo-34323.CRErrt.rst [new file with mode: 0644]

index bdb9a6e28a86bb3951b22f35099564615cc09461..7f264e6f9a07a3a4c0e65daaa8e46a97ba862187 100644 (file)
@@ -7,6 +7,7 @@ import math
 import msvcrt
 import socket
 import struct
+import time
 import weakref
 
 from . import events
@@ -802,10 +803,21 @@ class IocpProactor:
                             context['source_traceback'] = fut._source_traceback
                         self._loop.call_exception_handler(context)
 
-        # wait until all cancelled overlapped future complete
+        # Wait until all cancelled overlapped complete: don't exit with running
+        # overlapped to prevent a crash. Display progress every second if the
+        # loop is still running.
+        msg_update = 1.0
+        start_time = time.monotonic()
+        next_msg = start_time + msg_update
         while self._cache:
-            if not self._poll(1):
-                logger.debug('taking long time to close proactor')
+            if next_msg <= time.monotonic():
+                logger.debug('IocpProactor.close(): '
+                             'loop is running after closing for %.1f seconds',
+                             time.monotonic() - start_time)
+                next_msg = time.monotonic() + msg_update
+
+            # handle a few events, or timeout
+            self._poll(msg_update)
 
         self._results = []
 
diff --git a/Misc/NEWS.d/next/Library/2019-01-14-17-34-36.bpo-34323.CRErrt.rst b/Misc/NEWS.d/next/Library/2019-01-14-17-34-36.bpo-34323.CRErrt.rst
new file mode 100644 (file)
index 0000000..5926924
--- /dev/null
@@ -0,0 +1,3 @@
+:mod:`asyncio`: Enhance ``IocpProactor.close()`` log: wait 1 second before
+the first log, then log every second. Log also the number of seconds since
+``close()`` was called.