On Tue, 07 Jun 2005 09:41:16 -0400, Peter Hansen wrote:

On Tue, 07 Jun 2005 06:28:33 -0700, Prashanth  Ellina wrote:

> Hi,
> 
> I have used the low-level thread module to write a multi-threaded app.
> 
> tid = thread.start_new_thread(process, ())
> tid is an integer thread ident.
> 
> the thread takes around 10 seconds to finish processing. Meanwhile the
> main thread finished execution and exits. This causes an error because
> the child thread tries to access something in the sys module which has
> already  been GC'ed.  I want a reliable way of knowing when the child
> thread finished execution so that I can make the main thread wait till
> then.
> 

Prashanth,

By reading the Python documentation I figured out to do the following:

        import threading

        # create an event flag to signal the completion of the thread
        task_event=threading.Event()

        # create thread
        task_thread = threading.Thread\
        (None, name_of_thread_function, None, (thread_args...))
        
        # clear the wait for event flag
        task_event.clear()
        
        while ...:
                # run thread 
                try:
                        task_thread.start()
                except:
                        task_event.set()
                        error_handler()

                if main thread has nothing to do:
                        # wait for thread to complete (wait on event flag)
                        task_event.wait()
                else:
                        if task_event.isSet():
                                # thread has completed
                        else:
                                # thread is still active
                                # so main thread can continue with more tasks

        ##end while...
                
Remember to have the "task_thread" set the "task_event" flag prior to
completing.

Hope this helps.

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to