Well, just to be pedantic, in CPython you get:

>>> import clr
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named clr
>>> from System.Threading import ApartmentState,Thread, ThreadStart
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named System.Threading
>>>
>>> def Run():
...     print wibble
...
>>> t = Thread(ThreadStart(Run))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'Thread' is not defined
>>> t.ApartmentState = ApartmentState.STA
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'ApartmentState' is not defined
>>> t.Start()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 't' is not defined
>>> Thread.Sleep(90000)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'Thread' is not defined

On the other hand if you do the same thing in both IronPython & CPython:

import thread
def Run():
    print wibble

thread.start_new_thread(Run, ())

you get the same results.

This is because in .NET threads don't have a backstop for unhandled exceptions 
(and it's generally considered a good thing, and a positive change in v2.0 - 
this helps prevent unhandled exceptions from going unnoticed).  Obviously 
Python has made a different choice here (as did .NET v1.x) and so we respect 
that choice when you use the standard Python functionality.

-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Michael Foord
Sent: Tuesday, October 09, 2007 12:07 PM
To: Discussion of IronPython
Subject: Re: [IronPython] [python] IP2A4 - Bug when Exception thrown on worker 
thread

Davy Mitchell wrote:
> Hi - the following snippit crashes IP2A4.
>

It crashes 1.1 as well. We just kind of accepted that unhandled
exceptions on threads cause app domain errors.

In CPython it just raises an exception and terminates the thread.

Michael
http://www.manning.com/foord

> import clr
> from System.Threading import ApartmentState,Thread, ThreadStart
>
> def Run():
>     print wibble
>
> t = Thread(ThreadStart(Run))
> t.ApartmentState = ApartmentState.STA
> t.Start()
> Thread.Sleep(90000)
>
> Unhandled Exception: Microsoft.Scripting.UnboundNameException: name 'wibble' 
> is
> not defined
>    at IronPython.Runtime.PythonContext.MissingName(SymbolId name)
>    at Microsoft.Scripting.ModuleGlobalWrapper.GetCachedValue()
>    at Microsoft.Scripting.ModuleGlobalWrapper.get_CurrentValue()
>    at __main__$mod_2.Run$1() in bug.py:line 5
>    at _stub_##17(Object[] , DynamicSite`2 , CodeContext , Object )
>    at 
> Microsoft.Scripting.Actions.DynamicSite`2.UpdateBindingAndInvoke(CodeConte
> xt context, T0 arg0)
>    at 
> Microsoft.Scripting.Actions.DynamicSiteHelpers.UninitializedTargetHelper`7
> .Invoke1(DynamicSite`2 site, CodeContext context, T0 arg0)
>    at Microsoft.Scripting.Actions.DynamicSite`2.Invoke(CodeContext context, 
> T0 a
> rg0)
>    at System.Void(), using PythonBinder##9(Object[] )
>    at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
>    at System.Threading.ExecutionContext.Run(ExecutionContext 
> executionContext, C
> ontextCallback callback, Object state)
>    at System.Threading.ThreadHelper.ThreadStart()
>
>

_______________________________________________
Users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
_______________________________________________
Users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

Reply via email to