@@ -622,7 +622,7 @@ class Thread(_Verbose):
622622 #XXX __exc_clear = _sys.exc_clear
623623
624624 def __init__ (self , group = None , target = None , name = None ,
625- args = (), kwargs = None , verbose = None ):
625+ args = (), kwargs = None , verbose = None , * , daemon = None ):
626626 assert group is None , "group argument must be None for now"
627627 _Verbose .__init__ (self , verbose )
628628 if kwargs is None :
@@ -631,7 +631,10 @@ def __init__(self, group=None, target=None, name=None,
631631 self ._name = str (name or _newname ())
632632 self ._args = args
633633 self ._kwargs = kwargs
634- self ._daemonic = self ._set_daemon ()
634+ if daemon is not None :
635+ self ._daemonic = daemon
636+ else :
637+ self ._daemonic = current_thread ().daemon
635638 self ._ident = None
636639 self ._started = Event ()
637640 self ._stopped = False
@@ -648,10 +651,6 @@ def _reset_internal_locks(self):
648651 self ._block .__init__ ()
649652 self ._started ._reset_internal_locks ()
650653
651- def _set_daemon (self ):
652- # Overridden in _MainThread and _DummyThread
653- return current_thread ().daemon
654-
655654 def __repr__ (self ):
656655 assert self ._initialized , "Thread.__init__() was not called"
657656 status = "initial"
@@ -948,15 +947,12 @@ def run(self):
948947class _MainThread (Thread ):
949948
950949 def __init__ (self ):
951- Thread .__init__ (self , name = "MainThread" )
950+ Thread .__init__ (self , name = "MainThread" , daemon = False )
952951 self ._started .set ()
953952 self ._set_ident ()
954953 with _active_limbo_lock :
955954 _active [self ._ident ] = self
956955
957- def _set_daemon (self ):
958- return False
959-
960956 def _exitfunc (self ):
961957 self ._stop ()
962958 t = _pickSomeNonDaemonThread ()
@@ -988,7 +984,7 @@ def _pickSomeNonDaemonThread():
988984class _DummyThread (Thread ):
989985
990986 def __init__ (self ):
991- Thread .__init__ (self , name = _newname ("Dummy-%d" ))
987+ Thread .__init__ (self , name = _newname ("Dummy-%d" ), daemon = True )
992988
993989 # Thread._block consumes an OS-level locking primitive, which
994990 # can never be used by a _DummyThread. Since a _DummyThread
@@ -1000,9 +996,6 @@ def __init__(self):
1000996 with _active_limbo_lock :
1001997 _active [self ._ident ] = self
1002998
1003- def _set_daemon (self ):
1004- return True
1005-
1006999 def join (self , timeout = None ):
10071000 assert False , "cannot join a dummy thread"
10081001
0 commit comments