From 67da89446a0b3f008a15e6a510925921ca6f9303 Mon Sep 17 00:00:00 2001 From: Giampaolo Rodola' Date: Mon, 14 Jan 2013 02:24:25 +0100 Subject: [PATCH] fix for previous commit related to issue 10527 which didn't have the intended effect as per http://bugs.python.org/issue10527#msg179895 --- Lib/multiprocessing/connection.py | 48 ++++++++++++++++--------------- Lib/test/test_multiprocessing.py | 2 +- 2 files changed, 26 insertions(+), 24 deletions(-) diff --git a/Lib/multiprocessing/connection.py b/Lib/multiprocessing/connection.py index 25b0326333e..1d65f46a5bd 100644 --- a/Lib/multiprocessing/connection.py +++ b/Lib/multiprocessing/connection.py @@ -509,27 +509,6 @@ if sys.platform != 'win32': return c1, c2 else: - if hasattr(select, 'poll'): - def _poll(fds, timeout): - if timeout is not None: - timeout = int(timeout) * 1000 # timeout is in milliseconds - fd_map = {} - pollster = select.poll() - for fd in fds: - pollster.register(fd, select.POLLIN) - if hasattr(fd, 'fileno'): - fd_map[fd.fileno()] = fd - else: - fd_map[fd] = fd - ls = [] - for fd, event in pollster.poll(timeout): - if event & select.POLLNVAL: - raise ValueError('invalid file descriptor %i' % fd) - ls.append(fd_map[fd]) - return ls - else: - def _poll(fds, timeout): - return select.select(fds, [], [], timeout)[0] def Pipe(duplex=True): ''' @@ -883,6 +862,29 @@ if sys.platform == 'win32': else: + if hasattr(select, 'poll'): + def _poll(fds, timeout): + if timeout is not None: + timeout = int(timeout) * 1000 # timeout is in milliseconds + fd_map = {} + pollster = select.poll() + for fd in fds: + pollster.register(fd, select.POLLIN) + if hasattr(fd, 'fileno'): + fd_map[fd.fileno()] = fd + else: + fd_map[fd] = fd + ls = [] + for fd, event in pollster.poll(timeout): + if event & select.POLLNVAL: + raise ValueError('invalid file descriptor %i' % fd) + ls.append(fd_map[fd]) + return ls + else: + def _poll(fds, timeout): + return select.select(fds, [], [], timeout)[0] + + def wait(object_list, timeout=None): ''' Wait till an object in object_list is ready/readable. @@ -891,12 +893,12 @@ else: ''' if timeout is not None: if timeout <= 0: - return select.select(object_list, [], [], 0)[0] + return _poll(object_list, 0) else: deadline = time.time() + timeout while True: try: - return select.select(object_list, [], [], timeout)[0] + return _poll(object_list, timeout) except OSError as e: if e.errno != errno.EINTR: raise diff --git a/Lib/test/test_multiprocessing.py b/Lib/test/test_multiprocessing.py index bb09638d8c6..c38b314fa31 100644 --- a/Lib/test/test_multiprocessing.py +++ b/Lib/test/test_multiprocessing.py @@ -3244,7 +3244,7 @@ class TestWait(unittest.TestCase): from multiprocessing.connection import wait expected = 3 - sorted_ = lambda l: sorted(l, key=lambda x: isinstance(x, int)) + sorted_ = lambda l: sorted(l, key=lambda x: id(x)) sem = multiprocessing.Semaphore(0) a, b = multiprocessing.Pipe() p = multiprocessing.Process(target=self.signal_and_sleep,