Call a function when a thread exits

Carl Banks pavlovevidence at gmail.com
Thu May 7 21:33:38 EDT 2009


On May 7, 6:12 pm, "Giampaolo Rodola'" <gne... at gmail.com> wrote:
> Hi,
> I'm searching for a smooth way to call a certain function when a
> thread has finished its job.
> I guess I can keep calling isAlive() in a loop and call my function
> when it returns False but it's not very elegant.
> Actually I'm a bit surprised it doesn't exists an "atexit" function.
> Something like:
>
> import threading, time
>
> def myfun():
>     time.sleep(1)
>     print "hello"
>
> def cleanup():
>     print "thread finished, starting cleanup operations..."
>
> t = threading.Thread(target=myfun)
> t.atexit(target=cleanup)
> t.start()
>
> Is there a reason why there's no such thing in the threading module?

You can define your target function to clean up on exit.  Using your
definitions of myfun and cleanup,

def mycleanfun():
    try:
        myfun()
    finally:
        cleanup()

t = threading.Thread(target=mycleanfun)
t.start()


Carl Banks



More information about the Python-list mailing list