diff options
author | Giampaolo Rodola' <g.rodola@gmail.com> | 2013-01-14 01:24:05 (GMT) |
---|---|---|
committer | Giampaolo Rodola' <g.rodola@gmail.com> | 2013-01-14 01:24:05 (GMT) |
commit | 0c8ad61c9576916c7f1e567d7a364fc7d79f8672 (patch) | |
tree | 22e3948a883e9340d6fd40090f82cf041e50feea /Lib | |
parent | 0ee84e04da7883623842d67bb1b1706bfacab309 (diff) | |
download | cpython-0c8ad61c9576916c7f1e567d7a364fc7d79f8672.zip cpython-0c8ad61c9576916c7f1e567d7a364fc7d79f8672.tar.gz cpython-0c8ad61c9576916c7f1e567d7a364fc7d79f8672.tar.bz2 |
fix for previous commit related to issue 10527 which didn't have the intended effect as per http://bugs.python.org/issue10527#msg179895
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/multiprocessing/connection.py | 48 | ||||
-rw-r--r-- | 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 74fc958..9a357f6 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 9fd8118..07bfe2f 100644 --- a/Lib/test/test_multiprocessing.py +++ b/Lib/test/test_multiprocessing.py @@ -3263,7 +3263,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, |