Reputation: 4993
How can I check if the Main Thread is alive from another ( non-daemon, child ) thread?
The child thread is a non-daemon thread and I'd like to check if the Main thread is still running or not, and stop this non-daemon thread based on the result.
( Making the thread daemon is not good for my situation because my thread writes to stdout
which creates problems when the thread is set as a daemon)
Using python 2.7
Upvotes: 10
Views: 11359
Reputation: 2397
Since Python 3.4, there's threading.main_thread()
for that.
So a thread main loop could look like this:
while threading.main_thread().is_alive():
# keep doing things
Upvotes: 0
Reputation: 73
apart from what Raghav's said, you can also save the main thread in a global variable from inside it like:
mainThread = threading.currentThread() # current_thread() in py 3
then use mainThread.isAlive()
.
Upvotes: 1
Reputation: 4076
For Python 2.7 you can try this:
for i in threading.enumerate():
if i.name == "MainThread":
print i.is_alive()
The usage of lower camel case in function names is deprecated and so you should be using i.is_alive()
instead of i.isAlive()
.
If you like one-liners try this:
is_main_thread_active = lambda : any((i.name == "MainThread") and i.is_alive() for i in threading.enumerate())
Then call is_main_thread_active()
to check if the Main Thread is active.
For one time use, however, you could use this directly without creating a function.
any((i.name == "MainThread") and i.is_alive() for i in threading.enumerate())
Check this page for more info about threading.
In python 3.4 a dedicated function to return the main thread exists and so you can use this one liner to see if your main thread is still alive..
threading.main_thread().is_alive()
Hope this helps you.
Upvotes: 16