diff -r ac13bf1967b5 Lib/threading.py --- a/Lib/threading.py Thu Sep 15 14:15:29 2016 -0400 +++ b/Lib/threading.py Thu Sep 15 21:32:21 2016 +0200 @@ -838,9 +838,11 @@ if not self._initialized: raise RuntimeError("thread.__init__() not called") - if self._started.is_set(): - raise RuntimeError("threads can only be started once") with _active_limbo_lock: + if self._started.is_set(): + raise RuntimeError("threads can only be started once") + if self in _limbo: + raise RuntimeError("thread currently starting") _limbo[self] = self try: _start_new_thread(self._bootstrap, ())