Check if current thread is main thread, in Python

multithreading, python

Solution

The problem with `threading.current_thread().name == 'MainThread'` is that one can always do:

threading.current_thread().name = 'MyName'
assert threading.current_thread().name == 'MainThread' # will fail

Perhaps the following is more solid:

threading.current_thread().__class__.__name__ == '_MainThread'

Having said that, one may still cunningly do:

threading.current_thread().__class__.__name__ = 'Grrrr'
assert threading.current_thread().__class__.__name__ == '_MainThread' # will fail

But this option still seems better; "after all, we're all consenting adults here."

UPDATE:

Python 3.4 introduced `threading.main_thread()` which is much better than the above:

assert threading.current_thread() is threading.main_thread()

UPDATE 2:

For Python < 3.4, perhaps the best option is:

isinstance(threading.current_thread(), threading._MainThread)

Problem

This has been answered for Android, Objective C and C++ before, but apparently not for Python. How do I reliably determine whether the current thread is the main thread? I can think of a few approaches, none of which really satisfy me, considering it could be as easy as comparing to `threading.MainThread` if it existed. Check the thread name The main thread is instantiated in `threading.py` like this: ``` Thread.__init__(self, name="MainThread") ``` so one could do ``` if threading.current_thread().name == 'MainThread' ``` but is this name fixed? Other codes I have seen checked whether `MainThread` is contained anywhere in the thread's name. Store the starting thread I could store a reference to the starting thread the moment the program starts up, i.e. while there are no other threads yet. This would be absolutely reliable, but way too cumbersome for such a simple query? Is there a more concise way of doing this?

Original source

Related problems