mirror of
https://github.com/python/cpython.git
synced 2025-11-24 20:30:18 +00:00
asyncio: Sync with github repo
This commit is contained in:
parent
a032e46df6
commit
90ecfe65e6
5 changed files with 110 additions and 36 deletions
|
|
@ -310,7 +310,10 @@ class SelectSelector(_BaseSelectorImpl):
|
|||
def select(self, timeout=None):
|
||||
timeout = None if timeout is None else max(timeout, 0)
|
||||
ready = []
|
||||
r, w, _ = self._select(self._readers, self._writers, [], timeout)
|
||||
try:
|
||||
r, w, _ = self._select(self._readers, self._writers, [], timeout)
|
||||
except InterruptedError:
|
||||
return ready
|
||||
r = set(r)
|
||||
w = set(w)
|
||||
for fd in r | w:
|
||||
|
|
@ -359,10 +362,11 @@ if hasattr(select, 'poll'):
|
|||
# poll() has a resolution of 1 millisecond, round away from
|
||||
# zero to wait *at least* timeout seconds.
|
||||
timeout = math.ceil(timeout * 1e3)
|
||||
|
||||
fd_event_list = self._poll.poll(timeout)
|
||||
|
||||
ready = []
|
||||
try:
|
||||
fd_event_list = self._poll.poll(timeout)
|
||||
except InterruptedError:
|
||||
return ready
|
||||
for fd, event in fd_event_list:
|
||||
events = 0
|
||||
if event & ~select.POLLIN:
|
||||
|
|
@ -423,9 +427,11 @@ if hasattr(select, 'epoll'):
|
|||
# FD is registered.
|
||||
max_ev = max(len(self._fd_to_key), 1)
|
||||
|
||||
fd_event_list = self._epoll.poll(timeout, max_ev)
|
||||
|
||||
ready = []
|
||||
try:
|
||||
fd_event_list = self._epoll.poll(timeout, max_ev)
|
||||
except InterruptedError:
|
||||
return ready
|
||||
for fd, event in fd_event_list:
|
||||
events = 0
|
||||
if event & ~select.EPOLLIN:
|
||||
|
|
@ -439,10 +445,8 @@ if hasattr(select, 'epoll'):
|
|||
return ready
|
||||
|
||||
def close(self):
|
||||
try:
|
||||
self._epoll.close()
|
||||
finally:
|
||||
super().close()
|
||||
self._epoll.close()
|
||||
super().close()
|
||||
|
||||
|
||||
if hasattr(select, 'devpoll'):
|
||||
|
|
@ -481,10 +485,11 @@ if hasattr(select, 'devpoll'):
|
|||
# devpoll() has a resolution of 1 millisecond, round away from
|
||||
# zero to wait *at least* timeout seconds.
|
||||
timeout = math.ceil(timeout * 1e3)
|
||||
|
||||
fd_event_list = self._devpoll.poll(timeout)
|
||||
|
||||
ready = []
|
||||
try:
|
||||
fd_event_list = self._devpoll.poll(timeout)
|
||||
except InterruptedError:
|
||||
return ready
|
||||
for fd, event in fd_event_list:
|
||||
events = 0
|
||||
if event & ~select.POLLIN:
|
||||
|
|
@ -498,10 +503,8 @@ if hasattr(select, 'devpoll'):
|
|||
return ready
|
||||
|
||||
def close(self):
|
||||
try:
|
||||
self._devpoll.close()
|
||||
finally:
|
||||
super().close()
|
||||
self._devpoll.close()
|
||||
super().close()
|
||||
|
||||
|
||||
if hasattr(select, 'kqueue'):
|
||||
|
|
@ -552,9 +555,11 @@ if hasattr(select, 'kqueue'):
|
|||
def select(self, timeout=None):
|
||||
timeout = None if timeout is None else max(timeout, 0)
|
||||
max_ev = len(self._fd_to_key)
|
||||
kev_list = self._kqueue.control(None, max_ev, timeout)
|
||||
|
||||
ready = []
|
||||
try:
|
||||
kev_list = self._kqueue.control(None, max_ev, timeout)
|
||||
except InterruptedError:
|
||||
return ready
|
||||
for kev in kev_list:
|
||||
fd = kev.ident
|
||||
flag = kev.filter
|
||||
|
|
@ -570,10 +575,8 @@ if hasattr(select, 'kqueue'):
|
|||
return ready
|
||||
|
||||
def close(self):
|
||||
try:
|
||||
self._kqueue.close()
|
||||
finally:
|
||||
super().close()
|
||||
self._kqueue.close()
|
||||
super().close()
|
||||
|
||||
|
||||
# Choose the best implementation, roughly:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue