(Merge 3.4) Closes #21595: asyncio.BaseSelectorEventLoop._read_from_self() now
reads all available bytes from the "self pipe", not only a single byte. This change reduces the risk of having the pipe full and so getting the innocuous "BlockingIOError: [Errno 11] Resource temporarily unavailable" message.
This commit is contained in:
commit
6ef1202eb9
|
@ -83,10 +83,15 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop):
|
|||
self.add_reader(self._ssock.fileno(), self._read_from_self)
|
||||
|
||||
def _read_from_self(self):
|
||||
try:
|
||||
self._ssock.recv(1)
|
||||
except (BlockingIOError, InterruptedError):
|
||||
pass
|
||||
while True:
|
||||
try:
|
||||
data = self._ssock.recv(4096)
|
||||
if not data:
|
||||
break
|
||||
except InterruptedError:
|
||||
continue
|
||||
except BlockingIOError:
|
||||
break
|
||||
|
||||
def _write_to_self(self):
|
||||
# This may be called from a different thread, possibly after
|
||||
|
|
Loading…
Reference in New Issue