summaryrefslogtreecommitdiffstats
path: root/Lib/asyncio/selector_events.py
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2014-06-10 08:23:10 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2014-06-10 08:23:10 (GMT)
commitbb2fc5b2a58993c80ee81f10fe463039520a4162 (patch)
tree7f072c58fe93ed3fec34e99c5bb642e81f68be52 /Lib/asyncio/selector_events.py
parent15386652bfc57721d52e00e43a0e2ed66724995d (diff)
downloadcpython-bb2fc5b2a58993c80ee81f10fe463039520a4162.zip
cpython-bb2fc5b2a58993c80ee81f10fe463039520a4162.tar.gz
cpython-bb2fc5b2a58993c80ee81f10fe463039520a4162.tar.bz2
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".
Diffstat (limited to 'Lib/asyncio/selector_events.py')
-rw-r--r--Lib/asyncio/selector_events.py16
1 files changed, 8 insertions, 8 deletions
diff --git a/Lib/asyncio/selector_events.py b/Lib/asyncio/selector_events.py
index 86a8d23..1f8e5c8 100644
--- a/Lib/asyncio/selector_events.py
+++ b/Lib/asyncio/selector_events.py
@@ -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)