mirror of
https://github.com/python/cpython.git
synced 2025-12-04 00:30:19 +00:00
Issue #21326: Add a new is_closed() method to asyncio.BaseEventLoop
Add BaseEventLoop._closed attribute and use it to check if the event loop was
closed or not, instead of checking different attributes in each subclass of
BaseEventLoop.
run_forever() and run_until_complete() methods now raise a RuntimeError('Event loop is
closed') exception if the event loop was closed.
BaseProactorEventLoop.close() now also cancels "accept futures".
This commit is contained in:
parent
15386652bf
commit
bb2fc5b2a5
7 changed files with 80 additions and 19 deletions
|
|
@ -55,11 +55,13 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop):
|
|||
return _SelectorDatagramTransport(self, sock, protocol, address, extra)
|
||||
|
||||
def close(self):
|
||||
if self.is_closed():
|
||||
return
|
||||
self._close_self_pipe()
|
||||
if self._selector is not None:
|
||||
self._close_self_pipe()
|
||||
self._selector.close()
|
||||
self._selector = None
|
||||
super().close()
|
||||
super().close()
|
||||
|
||||
def _socketpair(self):
|
||||
raise NotImplementedError
|
||||
|
|
@ -143,8 +145,7 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop):
|
|||
|
||||
def add_reader(self, fd, callback, *args):
|
||||
"""Add a reader callback."""
|
||||
if self._selector is None:
|
||||
raise RuntimeError('Event loop is closed')
|
||||
self._check_closed()
|
||||
handle = events.Handle(callback, args, self)
|
||||
try:
|
||||
key = self._selector.get_key(fd)
|
||||
|
|
@ -160,7 +161,7 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop):
|
|||
|
||||
def remove_reader(self, fd):
|
||||
"""Remove a reader callback."""
|
||||
if self._selector is None:
|
||||
if self.is_closed():
|
||||
return False
|
||||
try:
|
||||
key = self._selector.get_key(fd)
|
||||
|
|
@ -182,8 +183,7 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop):
|
|||
|
||||
def add_writer(self, fd, callback, *args):
|
||||
"""Add a writer callback.."""
|
||||
if self._selector is None:
|
||||
raise RuntimeError('Event loop is closed')
|
||||
self._check_closed()
|
||||
handle = events.Handle(callback, args, self)
|
||||
try:
|
||||
key = self._selector.get_key(fd)
|
||||
|
|
@ -199,7 +199,7 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop):
|
|||
|
||||
def remove_writer(self, fd):
|
||||
"""Remove a writer callback."""
|
||||
if self._selector is None:
|
||||
if self.is_closed():
|
||||
return False
|
||||
try:
|
||||
key = self._selector.get_key(fd)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue