mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
Fix issue 10527: make multiprocessing use poll() instead of select() if available.
This commit is contained in:
commit
b4f39e85f2
3 changed files with 27 additions and 2 deletions
|
@ -509,6 +509,27 @@ 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):
|
||||
'''
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue