[IronPython] IronPython and Threads

Curt Hagenlocher curt at hagenlocher.org
Sun Jun 8 19:04:02 CEST 2008


Under CLR 2, any uncaught exception in a thread other than the primary
thread will take down the entire process.  This is not specific to
IronPython.  I don't know what the Silverlight CLR will do under these
circumstances.

You could make a case that a Python-initiated thread shouldn't terminate the
process given that CPython wouldn't do the same, but as far as I know, we
haven't gotten any requests along those lines.  For now, you'll probably
want to wrap any function used as a thread "main" in a try/except and do
something to log the error in the exception handler.

On Sun, Jun 8, 2008 at 8:23 AM, Dan Eloff <dan.eloff at gmail.com> wrote:

> I'm having a problem debugging some issues that I suspect are thread
> related in Silverlight. My application is failing silently, so I have
> no way to be sure yet. Is it possible that exceptions in a background
> thread are quietly swallowed? I'm pretty sure my callback is being
> called, but all that is in it right now is a raise statement.
>
> I've enabled debug.
> <param name="initParams" value="debug=true,reportErrors=errorLocation" />
>
> I've been trying to explore Threads a little more with IronPython to
> see what might be the problem, but even there I'm not having much
> luck. I could swear this used to work in Beta 1. Now it crashes the
> interpreter.
>
> IronPython 2.0 Beta (2.0.0.2000) on .NET 2.0.50727.1433
> Copyright (c) Microsoft Corporation. All rights reserved.
> >>> from System.Threading import Thread, ThreadStart
> >>> def foo():
> ...     raise ValueError
> ...
> >>> t = Thread(ThreadStart(foo))
> >>> t.Start()
> >>>
> Unhandled Exception: System.ArgumentException
>   at foo$1##16(Closure )
>   at _stub_##25(Closure , CallSite , CodeContext , Object )
>   at Microsoft.Scripting.Utils.InvokeHelper`5.Invoke(Object arg0,
> Object arg1, Object arg2, Object arg3)
>   at Microsoft.Scripting.Utils.ReflectedCaller.InvokeInstance(Object
> instance, Object[] args)
>   at
> Microsoft.Scripting.Actions.ActionBinder.UpdateSiteAndExecute[T](CodeContext
> context, CallSite`1 site, Object[] args)
>   at Microsoft.Scripting.Actions.UpdateDelegates.Update1[T0,TRet](CallSite
> site, CodeContext context, T0 arg0)
>   at System.Void(), using PythonBinder##20(Closure )
>   at System.Threading.ExecutionContext.Run(ExecutionContext
> executionContext, ContextCallback callback, Object state)
>   at System.Threading.ThreadHelper.ThreadStart()
>
> What's going wrong? How should I be doing this?
>
> Thanks,
> -Dan
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ironpython-users/attachments/20080608/a1b19295/attachment.html>


More information about the Ironpython-users mailing list