multithread exception handling

Steve Horsley steve.horsley at gmail.com
Mon Sep 19 15:46:42 EDT 2005


pegazik at gmail.com wrote:
> Hello.
> 
> I have problem and I ask you for help. Probably there is some quite
> easy solution, but I can't see it.
> 
> I'm trying to perform some action that have to be timeout safe. So here
> is the structure of my program:
> 
> \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
> def TimeoutHandler():
>     print '!'
>     raise Exception
> 
> class Active:
>     def Action:
>     timer = Timer(1, TimeoutHandler)
>     print '1'
>     timer.start()
>     try:
>         print '2'
>         time.sleep(20)
>         print '3'
>     except:
>         print '4'
>     else:
>         print '5'
>     timer.cancel()
>     print '6'
> 
> active = Actice()
> 
> ///////////////////////////////////////////
> The output is:
> 12!356
> 
> My question is, why exception is not raised correctly? Could be the
> reason that (probably) timer is another thread and there is no
> exception in the main thread? How to solve this problem? [My timeout
> should be smaller than one second so I can't use signal.alarm()]
> 
> Thanks for your reply,
> Krzysztof Nowak
> 

As far as I can see, the exception is raised in the CORRECT 
thread - the one (belonging to the Timer) that is executing a 
raise statement.

If you want to raise an exception in a different thread, you have 
to arrange some inter-thread communication. Except that the way 
to communicate between threads is to share an object where one 
thread writes to an object's state and another waits for or 
periodically checks for a change in the objects state.

It's difficult to say more without knowing what problem you are 
trying to solve.

Steve



More information about the Python-list mailing list