Yurii Karabas | 0ec34ca | 2020-11-24 20:08:54 +0200 | [diff] [blame] | 1 | """Event loop mixins.""" |
2 | |||||
3 | import threading | ||||
4 | from . import events | ||||
5 | |||||
6 | _global_lock = threading.Lock() | ||||
7 | |||||
8 | |||||
9 | class _LoopBoundedMixin: | ||||
10 | _loop = None | ||||
11 | |||||
12 | def _get_loop(self): | ||||
13 | loop = events._get_running_loop() | ||||
14 | |||||
15 | if self._loop is None: | ||||
16 | with _global_lock: | ||||
17 | if self._loop is None: | ||||
18 | self._loop = loop | ||||
19 | if loop is not self._loop: | ||||
20 | raise RuntimeError(f'{type(self).__name__} have already bounded to another loop') | ||||
21 | return loop |