Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Catching thread exceptions

Reply
Thread Tools

Catching thread exceptions

 
 
Steve Tuckner
Guest
Posts: n/a
 
      08-08-2003
This is a multi-part message in MIME format.

------=_NextPart_000_00DF_01C35DA8.55D95060
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

Recently I was helping a colleague who was new to Ruby with a program
that was using threads. It seemed to him that for some reason that some
of the thread's were not running. First he tried adding sleeps to the
main thread to "give time" to the other threads to run, but this didn't
work. It turns out that by joining the threads in question, that there
were errors in the program that were throwing exceptions that killed the
thread -- SILENTLY.

I don't know if there is a better way to do this, but this is the
solution we came up with to print out any exceptions that occur in a
thread (uncaught) and exit the program.

require "thread"

class MyThread < Thread
def initialize(*args, &block)
super(*args) do
begin
block.call
rescue Exception => e
$stderr.print "Exception occured: #{e.message} at " +
e.backtrace.join("\n")
exit! 1
end
end
end
end

Is there a better way?

Steve Tuckner

------=_NextPart_000_00DF_01C35DA8.55D95060
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>



<META content=3D"MSHTML 6.00.2600.0" name=3DGENERATOR></HEAD>
<BODY>
<DIV><FONT face=3DArial size=3D2><SPAN =
class=3D009342117-08082003>Recently I was=20
helping a colleague who was new to Ruby with a program that was using =
threads.=20
It seemed to him that for some reason that some of&nbsp;the thread's =
were not=20
running. First he tried adding sleeps to the main thread to "give time" =
to the=20
other threads to run, but this didn't work. It turns out that by =
joining the=20
threads in question, that there were errors in the program that were =
throwing=20
exceptions that killed the thread -- SILENTLY.</SPAN></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><SPAN=20
class=3D009342117-08082003></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><SPAN class=3D009342117-08082003>I =
don't know if=20
there is a better way to do this, but this is the solution we came up =
with to=20
print out any exceptions that occur in a thread (uncaught) and exit the =

program.</SPAN></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><SPAN=20
class=3D009342117-08082003></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><SPAN =
class=3D009342117-08082003>require=20
"thread"</SPAN></FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><SPAN class=3D009342117-08082003>class =
MyThread &lt;=20
Thread<BR>&nbsp;def initialize(*args, =
&amp;block)<BR>&nbsp;&nbsp;super(*args)=20
do<BR>&nbsp;&nbsp;&nbsp;begin<BR>&nbsp;&nbsp;&nbsp ;&nbsp;block.call<BR>&=
nbsp;&nbsp;&nbsp;rescue=20
Exception =3D&gt; e<BR>&nbsp;&nbsp;&nbsp;&nbsp;$stderr.print "Exception =
occured:=20
#{e.message} at " + =
e.backtrace.join("\n")<BR>&nbsp;&nbsp;&nbsp;&nbsp; exit!=20
1<BR>&nbsp;&nbsp;&nbsp;end<BR>&nbsp;&nbsp;end<BR>& nbsp;end<BR>end</SPAN>=
</FONT></DIV>
<DIV><FONT face=3DArial size=3D2><SPAN=20
class=3D009342117-08082003></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><SPAN class=3D009342117-08082003>Is =
there a better=20
way?</SPAN></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><SPAN=20
class=3D009342117-08082003></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><SPAN class=3D009342117-08082003>Steve =

Tuckner</SPAN></FONT></DIV></BODY></HTML>

------=_NextPart_000_00DF_01C35DA8.55D95060--

 
Reply With Quote
 
 
 
 
ts
Guest
Posts: n/a
 
      08-08-2003
>>>>> "S" == Steve Tuckner <(E-Mail Removed)> writes:

S> Is there a better way?

Thread.abort_on_exception = true

svg% ruby -e 'Thread.new { raise "aa" }; p "after"'
"after"
svg%

svg% ruby -e 'Thread.abort_on_exception = true; Thread.new { raise "aa" }; p "after"'
-e:1: aa (RuntimeError)
from -e:1:in `initialize'
from -e:1:in `new'
from -e:1
svg%


Guy Decoux

 
Reply With Quote
 
 
 
 
Brian Candler
Guest
Posts: n/a
 
      08-08-2003
On Sat, Aug 09, 2003 at 02:34:48AM +0900, ts wrote:
> >>>>> "S" == Steve Tuckner <(E-Mail Removed)> writes:

>
> S> Is there a better way?
>
> Thread.abort_on_exception = true


described at
http://www.rubycentral.com/book/tut_threads.html
and
http://www.rubycentral.com/book/ref_...t_on_exception

Regards,

Brian.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Catching thread exceptions (Net::IMAP timeout) anselm Ruby 2 03-22-2007 11:31 AM
worker thread catching exceptions and putting them in queue Paul Sijben Python 5 03-08-2007 08:36 PM
Catching unhandled exceptions using HttpModules Amil Hanish ASP .Net 0 04-12-2006 11:51 PM
Re: Catching exceptions that are never thrown Adam Maass Java 5 07-22-2003 10:58 PM
Re: catching exceptions from web user controls Marina ASP .Net 2 07-08-2003 04:48 PM



Advertisments