summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
Diffstat (limited to 'Lib')
-rw-r--r--Lib/multiprocessing/connection.py48
-rw-r--r--Lib/test/test_multiprocessing.py2
2 files changed, 26 insertions, 24 deletions
diff --git a/Lib/multiprocessing/connection.py b/Lib/multiprocessing/connection.py
index 25b0326..1d65f46 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 bb09638..c38b314 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,