diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2014-01-31 15:25:24 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2014-01-31 15:25:24 (GMT) |
commit | f2e1768bc17d199f2ad81d7786e0150585c7cdb4 (patch) | |
tree | c8161bcf211c110e0a3a6e9e1a32cbcbe9e50c8c | |
parent | 665758f804e81ad3217f1f556700b618686d920f (diff) | |
download | cpython-f2e1768bc17d199f2ad81d7786e0150585c7cdb4.zip cpython-f2e1768bc17d199f2ad81d7786e0150585c7cdb4.tar.gz cpython-f2e1768bc17d199f2ad81d7786e0150585c7cdb4.tar.bz2 |
Issue #20455: asyncio: use the same code to round a timeout than the selectors
module
Sort also imports
-rw-r--r-- | Lib/asyncio/windows_events.py | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/Lib/asyncio/windows_events.py b/Lib/asyncio/windows_events.py index d01de2f..0a2d981 100644 --- a/Lib/asyncio/windows_events.py +++ b/Lib/asyncio/windows_events.py @@ -1,11 +1,12 @@ """Selector and proactor eventloops for Windows.""" +import _winapi import errno +import math import socket +import struct import subprocess import weakref -import struct -import _winapi from . import events from . import base_subprocess @@ -325,7 +326,9 @@ class IocpProactor: if timeout is None: ms = _winapi.INFINITE else: - ms = int(timeout * 1000 + 0.5) + # RegisterWaitForSingleObject() has a resolution of 1 millisecond, + # round away from zero to wait *at least* timeout seconds. + ms = math.ceil(timeout * 1e3) # We only create ov so we can use ov.address as a key for the cache. ov = _overlapped.Overlapped(NULL) @@ -396,7 +399,9 @@ class IocpProactor: elif timeout < 0: raise ValueError("negative timeout") else: - ms = int(timeout * 1000 + 0.5) + # GetQueuedCompletionStatus() has a resolution of 1 millisecond, + # round away from zero to wait *at least* timeout seconds. + ms = math.ceil(timeout * 1e3) if ms >= INFINITE: raise ValueError("timeout too big") while True: |