'Initializes daemon threads. Threads can\'t be reused so we need to recreate
them if we\'re restarted.'

def _launch_threads(self):

    with self._socket._get_send_lock():
        if ((not self._reader_thread) or (not self._reader_thread.is_alive())):
            self._reader_thread = threading.Thread(target=self._reader_loop, name='Tor    Listener')
            self._reader_thread.setDaemon(True)
            self._reader_thread.start()
        if ((not self._event_thread) or (not self._event_thread.is_alive())):
            self._event_thread = threading.Thread(target=self._event_loop, name='Event    Notifier')
            self._event_thread.setDaemon(True)
            self._event_thread.start()
