diff options
| author | Victor Stinner <victor.stinner@gmail.com> | 2014-06-03 23:06:24 (GMT) |
|---|---|---|
| committer | Victor Stinner <victor.stinner@gmail.com> | 2014-06-03 23:06:24 (GMT) |
| commit | 17f3663497116316116fa560ce59f842cee4e473 (patch) | |
| tree | 6b9079da8f666037b1c4efc178e97efc197cf3b7 /Lib/asyncio/selector_events.py | |
| parent | 8526a945a09656338dcccec23ac69269462a34e0 (diff) | |
| download | cpython-17f3663497116316116fa560ce59f842cee4e473.zip cpython-17f3663497116316116fa560ce59f842cee4e473.tar.gz cpython-17f3663497116316116fa560ce59f842cee4e473.tar.bz2 | |
Issue #21326: Add asyncio.BaseEventLoop.is_closed() method
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() now raises 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.py | 16 |
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) |
