def __init__(self): self._pid = os.getpid() self._loop = libev.Loop() self._notifier = libev.Async(self._loop) self._notifier.start() # prevent _notifier from keeping the loop from returning self._loop.unref() self._started = False self._shutdown = False self._lock = Lock() self._lock_thread = Lock() self._thread = None # set of all connections; only replaced with a new copy # while holding _conn_set_lock, never modified in place self._live_conns = set() # newly created connections that need their write/read watcher started self._new_conns = set() # recently closed connections that need their write/read watcher stopped self._closed_conns = set() self._conn_set_lock = Lock() self._preparer = libev.Prepare(self._loop, self._loop_will_run) # prevent _preparer from keeping the loop from returning self._loop.unref() self._preparer.start() self._timers = TimerManager() self._loop_timer = libev.Timer(self._loop, self._on_loop_timer)
from cassandra.marshal import int32_unpack import cassandra.io.libevwrapper as libev try: from cStringIO import StringIO except ImportError: from StringIO import StringIO # ignore flake8 warning: # NOQA try: import ssl except ImportError: ssl = None # NOQA log = logging.getLogger(__name__) _loop = libev.Loop() _loop_notifier = libev.Async(_loop) _loop_notifier.start() # prevent _loop_notifier from keeping the loop from returning _loop.unref() _loop_started = None _loop_lock = Lock() def _run_loop(): while True: end_condition = _loop.start() # there are still active watchers, no deadlock with _loop_lock: