Dan Barzilay
Dan Barzilay

Reputation: 4993

Check if the Main Thread is still alive from another thread

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

Answers (3)

Jeronimo
Jeronimo

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

xenon134
xenon134

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

Raghav RV
Raghav RV

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

Related Questions