changeset: 81172:5530251d9cac branch: 3.2 parent: 81165:0786dfc3b2b4 user: Giampaolo Rodola' date: Mon Dec 31 17:23:09 2012 +0100 files: Lib/multiprocessing/connection.py Lib/test/test_multiprocessing.py Misc/NEWS description: Fix issue 10527: make multiprocessing use poll() instead of select() if available. diff -r 0786dfc3b2b4 -r 5530251d9cac Lib/multiprocessing/connection.py --- a/Lib/multiprocessing/connection.py Mon Dec 31 03:40:36 2012 +0100 +++ b/Lib/multiprocessing/connection.py Mon Dec 31 17:23:09 2012 +0100 @@ -213,6 +213,27 @@ 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] from _multiprocessing import win32 diff -r 0786dfc3b2b4 -r 5530251d9cac Lib/test/test_multiprocessing.py --- a/Lib/test/test_multiprocessing.py Mon Dec 31 03:40:36 2012 +0100 +++ b/Lib/test/test_multiprocessing.py Mon Dec 31 17:23:09 2012 +0100 @@ -1574,6 +1574,7 @@ self.assertTimingAlmostEqual(poll.elapsed, TIMEOUT1) conn.send(None) + time.sleep(.1) self.assertEqual(poll(TIMEOUT1), True) self.assertTimingAlmostEqual(poll.elapsed, 0) diff -r 0786dfc3b2b4 -r 5530251d9cac Misc/NEWS --- a/Misc/NEWS Mon Dec 31 03:40:36 2012 +0100 +++ b/Misc/NEWS Mon Dec 31 17:23:09 2012 +0100 @@ -189,6 +189,8 @@ Library ------- +- Issue 10527: make multiprocessing use poll() instead of select() if available. + - Issue #16485: Fix file descriptor not being closed if file header patching fails on closing of aifc file.

AltStyle によって変換されたページ (->オリジナル) /