[Python-3000] About "daemon" in threading module

Nick Coghlan ncoghlan at gmail.com
Thu Sep 4 23:20:49 CEST 2008


Guido van Rossum wrote:
> On Thu, Sep 4, 2008 at 8:47 AM, Antoine Pitrou <solipsis at pitrou.net> wrote:
>> Jesus Cea <jcea <at> jcea.es> writes:
>>> First we had "thread.setDaemon()". This was not PEP8, so Python 3.0
>>> renamed it to "thread.set_daemon()". Lately Python 3.0 changes the
>>> method to an attribute "thread.daemon".
>>>
>>> I think the last change is risky, because you can mistype and create a
>>> new attribute, instead of set daemon mode. Since daemon mode is only
>>> usually visible when things goes wrong (the main thread dies), you can
>>> miss the bug for a long time.
>> I've never understood why the "daemon" flag couldn't be passed as one of the
>> constructor arguments. It would make code shorter, and avoid the mistyping risk
>> mentioned by Jesus. It also sounds saner, since you shouldn't change the flag
>> after the thread is started anyway.
> 
> As to the why question, this was done to match the Java Thread class.
> I don't want to speculate why the Java API was designed this way --
> possibly it was a relic of an earlier API version in Java, but
> possibly there's a reason I can't fathom right now. After all, there
> are excellent reasons why start() is a separate call...

Hmm, having (daemon=False) as a parameter on start() would probably be
an even better API than having it on __init__() (modulo subclassing
compatibility concerns).

Regarding Jesus concern, you can always call t._set_daemon(True) and
t._set_name(whatever) if you want the extra defence against typographic
errors. The potential for mistyping attribute names is hardly a problem
that is unique to threading.Thread.

Cheers,
Nick.

-- 
Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia
---------------------------------------------------------------
            http://www.boredomandlaziness.org


More information about the Python-3000 mailing list