[Python-checkins] cpython: Issue #20311: Revert e042ea77a152 and 7ce7295393c2, PollSelector.select() and

victor.stinner python-checkins at python.org
Sat Jan 25 14:44:31 CET 2014


http://hg.python.org/cpython/rev/90354a4c9dde
changeset:   88694:90354a4c9dde
user:        Victor Stinner <victor.stinner at gmail.com>
date:        Sat Jan 25 14:43:45 2014 +0100
summary:
  Issue #20311: Revert e042ea77a152 and 7ce7295393c2, PollSelector.select() and
EpollSelector.select() round again the timeout towards zero

files:
  Lib/selectors.py           |  10 ++--------
  Lib/test/test_selectors.py |  19 -------------------
  Misc/NEWS                  |   5 -----
  3 files changed, 2 insertions(+), 32 deletions(-)


diff --git a/Lib/selectors.py b/Lib/selectors.py
--- a/Lib/selectors.py
+++ b/Lib/selectors.py
@@ -8,7 +8,6 @@
 from abc import ABCMeta, abstractmethod
 from collections import namedtuple, Mapping
 import functools
-import math
 import select
 import sys
 
@@ -357,9 +356,8 @@
             elif timeout <= 0:
                 timeout = 0
             else:
-                # poll() has a resolution of 1 millisecond, round away from
-                # zero to wait *at least* timeout seconds.
-                timeout = int(math.ceil(timeout * 1e3))
+                # Round towards zero
+                timeout = int(timeout * 1000)
             ready = []
             try:
                 fd_event_list = self._poll.poll(timeout)
@@ -415,10 +413,6 @@
                 timeout = -1
             elif timeout <= 0:
                 timeout = 0
-            else:
-                # epoll_wait() has a resolution of 1 millisecond, round away
-                # from zero to wait *at least* timeout seconds.
-                timeout = math.ceil(timeout * 1e3) * 1e-3
             max_ev = len(self._fd_to_key)
             ready = []
             try:
diff --git a/Lib/test/test_selectors.py b/Lib/test/test_selectors.py
--- a/Lib/test/test_selectors.py
+++ b/Lib/test/test_selectors.py
@@ -363,25 +363,6 @@
         self.assertFalse(s.select(2))
         self.assertLess(time() - t, 2.5)
 
-    def test_timeout_rounding(self):
-        # Issue #20311: Timeout must be rounded away from zero to wait *at
-        # least* timeout seconds. For example, epoll_wait() has a resolution of
-        # 1 ms (10^-3), epoll.select(0.0001) must wait 1 ms, not 0 ms.
-        s = self.SELECTOR()
-        self.addCleanup(s.close)
-
-        rd, wr = self.make_socketpair()
-        s.register(rd, selectors.EVENT_READ)
-
-        for timeout in (1e-2, 1e-3, 1e-4):
-            t0 = perf_counter()
-            s.select(timeout)
-            dt = perf_counter() - t0
-            clock = get_clock_info('perf_counter')
-            self.assertGreaterEqual(dt, timeout,
-                                    "%.30f < %.30f ; clock=%s"
-                                    % (dt, timeout, clock))
-
 
 class ScalableSelectorMixIn:
 
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -40,11 +40,6 @@
   which it could get an inspect.Signature is a callable written in Python.
   Fix courtesy of Michael Foord.
 
-- Issue #20311: selector.PollSelector.select() now rounds the timeout away from
-  zero, instead of rounding towards zero. For example, a timeout of one
-  microsecond is now rounded to one millisecond, instead of being rounded to
-  zero.
-
 - Issue #20317: ExitStack.__exit__ could create a self-referential loop if an
   exception raised by a cleanup operation already had its context set
   correctly (for example, by the @contextmanager decorator). The infinite

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


More information about the Python-checkins mailing list