[Python-checkins] cpython (3.2): Fix issue 10527: make multiprocessing use poll() instead of select() if
giampaolo.rodola
python-checkins at python.org
Mon Dec 31 17:40:02 CET 2012
http://hg.python.org/cpython/rev/5530251d9cac
changeset: 81172:5530251d9cac
branch: 3.2
parent: 81165:0786dfc3b2b4
user: Giampaolo Rodola' <g.rodola at gmail.com>
date: Mon Dec 31 17:23:09 2012 +0100
summary:
Fix issue 10527: make multiprocessing use poll() instead of select() if available.
files:
Lib/multiprocessing/connection.py | 21 +++++++++++++++++++
Lib/test/test_multiprocessing.py | 1 +
Misc/NEWS | 2 +
3 files changed, 24 insertions(+), 0 deletions(-)
diff --git a/Lib/multiprocessing/connection.py b/Lib/multiprocessing/connection.py
--- a/Lib/multiprocessing/connection.py
+++ b/Lib/multiprocessing/connection.py
@@ -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 --git a/Lib/test/test_multiprocessing.py b/Lib/test/test_multiprocessing.py
--- a/Lib/test/test_multiprocessing.py
+++ b/Lib/test/test_multiprocessing.py
@@ -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 --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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.
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list