This class represents an activity that is run in a separate thread
of control. There are two ways to specify the activity: by
passing a callable object to the constructor, or by overriding the
run() method in a subclass. No other methods (except for the
constructor) should be overridden in a subclass. In other words,
only override the __init__() and run()
methods of this class.
Once a thread object is created, its activity must be started by
calling the thread's start() method. This invokes the
run() method in a separate thread of control.
Once the thread's activity is started, the thread is considered
'alive' and 'active' (these concepts are almost, but not quite
exactly, the same; their definition is intentionally somewhat
vague). It stops being alive and active when its run()
method terminates - either normally, or by raising an unhandled
exception. The isAlive() method tests whether the thread is
alive.
Other threads can call a thread's join() method. This blocks
the calling thread until the thread whose join() method is
called is terminated.
A thread has a name. The name can be passed to the constructor,
set with the setName() method, and retrieved with the
getName() method.
A thread can be flagged as a ``daemon thread''. The significance
of this flag is that the entire Python program exits when only
daemon threads are left. The initial value is inherited from the
creating thread. The flag can be set with the setDaemon()
method and retrieved with the isDaemon() method.
There is a ``main thread'' object; this corresponds to the
initial thread of control in the Python program. It is not a
daemon thread.
There is the possibility that ``dummy thread objects'' are
created. These are thread objects corresponding to ``alien
threads''. These are threads of control started outside the
threading module, such as directly from C code. Dummy thread objects
have limited functionality; they are always considered alive,
active, and daemonic, and cannot be join()ed. They are never
deleted, since it is impossible to detect the termination of alien
threads.
This constructor should always be called with keyword
arguments. Arguments are:
group should be None; reserved for future extension when
a ThreadGroup class is implemented.
target is the callable object to be invoked by the
run() method. Defaults to None, meaning nothing is
called.
name is the thread name. By default, a unique name is
constructed of the form ``Thread-N'' where N is a small
decimal number.
args is the argument tuple for the target invocation. Defaults
to ().
kwargs is a dictionary of keyword arguments for the target
invocation. Defaults to {}.
If the subclass overrides the constructor, it must make sure
to invoke the base class constructor (Thread.__init__())
before doing anything else to the thread.
You may override this method in a subclass. The standard
run() method invokes the callable object passed to the object's constructor as the
target argument, if any, with sequential and keyword
arguments taken from the args and kwargs arguments,
respectively.
Wait until the thread terminates.
This blocks the calling thread until the thread whose join()
method is called terminates - either normally or through an
unhandled exception - or until the optional timeout occurs.
When the timeout argument is present and not None, it should
be a floating point number specifying a timeout for the
operation in seconds (or fractions thereof).
A thread can be join()ed many times.
A thread cannot join itself because this would cause a
deadlock.
It is an error to attempt to join() a thread before it has
been started.
The name is a string used for identification purposes only.
It has no semantics. Multiple threads may be given the same
name. The initial name is set by the constructor.