Richard Oudkerk added the comment: It looks like the change to multiprocessing/connection.py committed does not match the one uploaded as issue10527-3.patch
changeset 81174:e971a70984b8 1.1 --- a/Lib/multiprocessing/connection.py 1.2 +++ b/Lib/multiprocessing/connection.py 1.3 @@ -509,6 +509,27 @@ if sys.platform != 'win32': 1.4 return c1, c2 1.5 1.6 else: 1.7 + if hasattr(select, 'poll'): 1.8 + def _poll(fds, timeout): 1.9 + if timeout is not None: 1.10 + timeout = int(timeout) * 1000 # timeout is in milliseconds 1.11 + fd_map = {} 1.12 + pollster = select.poll() 1.13 + for fd in fds: 1.14 + pollster.register(fd, select.POLLIN) 1.15 + if hasattr(fd, 'fileno'): 1.16 + fd_map[fd.fileno()] = fd 1.17 + else: 1.18 + fd_map[fd] = fd 1.19 + ls = [] 1.20 + for fd, event in pollster.poll(timeout): 1.21 + if event & select.POLLNVAL: 1.22 + raise ValueError('invalid file descriptor %i' % fd) 1.23 + ls.append(fd_map[fd]) 1.24 + return ls 1.25 + else: 1.26 + def _poll(fds, timeout): 1.27 + return select.select(fds, [], [], timeout)[0] 1.28 1.29 def Pipe(duplex=True): 1.30 ''' issue10527-3.patch: diff --git a/Lib/multiprocessing/connection.py b/Lib/multiprocessing/connection.py --- a/Lib/multiprocessing/connection.py +++ b/Lib/multiprocessing/connection.py @@ -861,6 +861,27 @@ return [o for o in object_list if o in ready_objects] 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): ''' @@ -870,12 +891,12 @@ ''' 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 ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue10527> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com