event loop mixins import threading from import events globallock threading lock class loopboundmixin loop none def getloopself loop events getrunningloop if self loop is none with globallock if self loop is none self loop loop if loop is not self loop raise runtimeerrorf self r is bound to a different event loop return loop
import threading
from . import events

_global_lock = threading.Lock()


class _LoopBoundMixin:
    _loop = None

    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