'Start the thread\'s activity.
It must be called at most once per thread object. It arranges for the
object\'s run() method to be invoked in a separate thread of control.
This method will raise a RuntimeError if called more than once on the
same thread object.'

def start(self):

    if (not self.__initialized):
        raise RuntimeError('thread.__init__()    not    called')
    if self.__started.is_set():
        raise RuntimeError('threads    can    only    be    started    once')
    if __debug__:
        self._note('%s.start():    starting    thread', self)
    with _active_limbo_lock:
        _limbo[self] = self
    try:
        _start_new_thread(self.__bootstrap, ())
    except Exception:
        with _active_limbo_lock:
            del _limbo[self]
        raise
    self.__started.wait()
