| """Event loop mixins.""" |
| |
| import threading |
| from . import events |
| |
| _global_lock = threading.Lock() |
| |
| # Used as a sentinel for loop parameter |
| _marker = object() |
| |
| |
| class _LoopBoundMixin: |
| _loop = None |
| |
| def __init__(self, *, loop=_marker): |
| if loop is not _marker: |
| raise TypeError( |
| f'As of 3.10, the *loop* parameter was removed from ' |
| f'{type(self).__name__}() since it is no longer necessary' |
| ) |
| |
| def _get_loop(self): |
| loop = events._get_running_loop() |
| |
| if self._loop is None: |
| with _global_lock: |
| if self._loop is None: |
| self._loop = loop |
| if loop is not self._loop: |
| raise RuntimeError(f'{self!r} is bound to a different event loop') |
| return loop |