mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
Issue #6064: Add a daemon
keyword argument to the threading.Thread
and multiprocessing.Process constructors in order to override the default behaviour of inheriting the daemonic property from the current thread/process.
This commit is contained in:
parent
4bc685752f
commit
0bd4deba38
7 changed files with 59 additions and 21 deletions
|
@ -622,7 +622,7 @@ class Thread(_Verbose):
|
|||
#XXX __exc_clear = _sys.exc_clear
|
||||
|
||||
def __init__(self, group=None, target=None, name=None,
|
||||
args=(), kwargs=None, verbose=None):
|
||||
args=(), kwargs=None, verbose=None, *, daemon=None):
|
||||
assert group is None, "group argument must be None for now"
|
||||
_Verbose.__init__(self, verbose)
|
||||
if kwargs is None:
|
||||
|
@ -631,7 +631,10 @@ class Thread(_Verbose):
|
|||
self._name = str(name or _newname())
|
||||
self._args = args
|
||||
self._kwargs = kwargs
|
||||
self._daemonic = self._set_daemon()
|
||||
if daemon is not None:
|
||||
self._daemonic = daemon
|
||||
else:
|
||||
self._daemonic = current_thread().daemon
|
||||
self._ident = None
|
||||
self._started = Event()
|
||||
self._stopped = False
|
||||
|
@ -648,10 +651,6 @@ class Thread(_Verbose):
|
|||
self._block.__init__()
|
||||
self._started._reset_internal_locks()
|
||||
|
||||
def _set_daemon(self):
|
||||
# Overridden in _MainThread and _DummyThread
|
||||
return current_thread().daemon
|
||||
|
||||
def __repr__(self):
|
||||
assert self._initialized, "Thread.__init__() was not called"
|
||||
status = "initial"
|
||||
|
@ -948,15 +947,12 @@ class _Timer(Thread):
|
|||
class _MainThread(Thread):
|
||||
|
||||
def __init__(self):
|
||||
Thread.__init__(self, name="MainThread")
|
||||
Thread.__init__(self, name="MainThread", daemon=False)
|
||||
self._started.set()
|
||||
self._set_ident()
|
||||
with _active_limbo_lock:
|
||||
_active[self._ident] = self
|
||||
|
||||
def _set_daemon(self):
|
||||
return False
|
||||
|
||||
def _exitfunc(self):
|
||||
self._stop()
|
||||
t = _pickSomeNonDaemonThread()
|
||||
|
@ -988,7 +984,7 @@ def _pickSomeNonDaemonThread():
|
|||
class _DummyThread(Thread):
|
||||
|
||||
def __init__(self):
|
||||
Thread.__init__(self, name=_newname("Dummy-%d"))
|
||||
Thread.__init__(self, name=_newname("Dummy-%d"), daemon=True)
|
||||
|
||||
# Thread._block consumes an OS-level locking primitive, which
|
||||
# can never be used by a _DummyThread. Since a _DummyThread
|
||||
|
@ -1000,9 +996,6 @@ class _DummyThread(Thread):
|
|||
with _active_limbo_lock:
|
||||
_active[self._ident] = self
|
||||
|
||||
def _set_daemon(self):
|
||||
return True
|
||||
|
||||
def join(self, timeout=None):
|
||||
assert False, "cannot join a dummy thread"
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue