Filed as http://ironpython.codeplex.com/workitem/30551

From: Jeff Hardy [mailto:jdha...@gmail.com]
Sent: Friday, April 15, 2011 9:41 AM
To: Discussion of IronPython
Cc: Dino Viehland; surangika ranathunga
Subject: Re: [IronPython] how to generate multiple concurrent scriptign engines?

Can one of your alter-egos file a bug so it doesn't get lost?

- Jeff
On Fri, Apr 15, 2011 at 10:36 AM, Dino Viehland 
<di...@microsoft.com<mailto:di...@microsoft.com>> wrote:
It might come from CopyReg but the bug is definitely in GetEqualSite - we just 
need a lock(_equalSites) { ... } around the TryGetValue and creation of the 
equal site.

From: 
users-boun...@lists.ironpython.com<mailto:users-boun...@lists.ironpython.com> 
[mailto:users-boun...@lists.ironpython.com<mailto:users-boun...@lists.ironpython.com>]
 On Behalf Of Jeff Hardy
Sent: Friday, April 15, 2011 7:29 AM
To: surangika ranathunga
Cc: Discussion of IronPython

Subject: Re: [IronPython] how to generate multiple concurrent scriptign engines?

Any chance you can share what the source is? The exception comes from 
PythonCopyReg's initialization, which means we might have a bug (it might not 
be thread-safe, or something else). If you could create a minimal sample that 
has the issue that would be even better.

- Jeff
On Thu, Apr 14, 2011 at 9:18 PM, surangika ranathunga 
<lady_ra...@yahoo.com<mailto:lady_ra...@yahoo.com>> wrote:
Hi,
Below is the exception I receive:
here, D:\PhD 
Work\Research\libomv\test\MonitorService\MonitorService\ExpectationMonitor.cs:line
 88 refers to source.Execute(scope); in the below given code.

System.Reflection.TargetInvocationException: Exception has been thrown by the 
target of an invocation. ---> System.Reflection.TargetInvocationException: 
Exception has been thrown by the target of an invocation. ---> 
System.NullReferenceExce
ption: Object reference not set to an instance of an object.
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, 
Boolean add)
   at System.Collections.Generic.Dictionary`2.set_Item(TKey key, TValue value)
   at IronPython.Runtime.PythonContext.GetEqualSite(Type type)
   at IronPython.Runtime.CommonDictionaryStorage.UpdateHelperFunctions(Type t, 
Object key)
   at IronPython.Runtime.CommonDictionaryStorage.AddNoLock(Object key, Object 
value)
   at IronPython.Runtime.CommonDictionaryStorage.Add(Object key, Object value)
   at IronPython.Runtime.PythonDictionary.SetItem(Object key, Object value)
   at IronPython.Runtime.PythonDictionary.set_Item(Object key, Object value)
   at IronPython.Modules.PythonCopyReg.PerformModuleReload(PythonContext 
context, PythonDictionary dict)
   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method, 
Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes 
methodAttributes, RuntimeType typeOwner)
   at System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo method, 
Object target, Object[] arguments, Signature sig, MethodAttributes 
methodAttributes, RuntimeType typeOwner)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags 
invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean 
skipVisibilityChecks)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags 
invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
   at IronPython.Runtime.PythonContext.CreateBuiltinModule(String moduleName, 
Type type, ModuleOptions options)
   at IronPython.Runtime.PythonContext.CreateBuiltinModule(String moduleName, 
Type type)
   at IronPython.Runtime.PythonContext.CreateBuiltinModule(String name)
   at IronPython.Runtime.PythonContext.GetBuiltinModule(String name)
   at IronPython.Runtime.Importer.ImportBuiltin(CodeContext context, String 
name)
   at IronPython.Modules.PythonCopyReg.EnsureModuleInitialized(CodeContext 
context)
   at IronPython.Modules.PythonCopyReg.GetDispatchTable(CodeContext context)
   at IronPython.Modules.PythonRegex.PerformModuleReload(PythonContext 
context,PythonDictionary dict)
   --- End of inner exception stack trace ---
   at Microsoft.Scripting.Actions.Calls.MethodCandidate.Caller.Call(Object[] 
args, Boolean& shouldOptimize)
   at 
IronPython.Runtime.Types.BuiltinFunction.BuiltinFunctionCaller`5.Call4(CallSite 
site, CodeContext context, TFuncType func, T0 arg0, T1 arg1, T2 arg2, T3 arg3)
   at 
System.Dynamic.UpdateDelegates.UpdateAndExecute6[T0,T1,T2,T3,T4,T5,TRet](CallSite
 site, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5)
   at IronPython.Runtime.Importer.Import(CodeContext context, String fullName, 
PythonTuple from, Int32 level)
   at IronPython.Runtime.Operations.PythonOps.ImportTop(CodeContext context, 
String fullName, Int32 level)
   at 
Microsoft.Scripting.Interpreter.FuncCallInstruction`4.Run(InterpretedFrame 
frame)
   at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
   at Microsoft.Scripting.Interpreter.LightLambda.Run2[T0,T1,TRet](T0 arg0, T1 
arg1)
   at IronPython.Compiler.PythonScriptCode.RunWorker(CodeContext ctx)
   at IronPython.Compiler.PythonScriptCode.Run(Scope scope)
   at IronPython.Compiler.RuntimeScriptCode.InvokeTarget(Scope scope)
   at IronPython.Compiler.RuntimeScriptCode.Run(Scope scope)
   at Microsoft.Scripting.SourceUnit.Execute(Scope scope, ErrorSink errorSink)
   at Microsoft.Scripting.SourceUnit.Execute(Scope scope)
   at Microsoft.Scripting.Hosting.ScriptSource.Execute(ScriptScope scope)
   at MonitorService.ExpectationMonitor.Initialize(String rule) in D:\PhD 
Work\Research\libomv\test\MonitorService\MonitorService\ExpectationMonitor.cs:line
 88

--- On Thu, 14/4/11, Jeff Hardy <jdha...@gmail.com<mailto:jdha...@gmail.com>> 
wrote:

From: Jeff Hardy <jdha...@gmail.com<mailto:jdha...@gmail.com>>
Subject: Re: [IronPython] how to generate multiple concurrent scriptign engines?
To: "Discussion of IronPython" 
<users@lists.ironpython.com<mailto:users@lists.ironpython.com>>
Cc: "surangika ranathunga" <lady_ra...@yahoo.com<mailto:lady_ra...@yahoo.com>>
Received: Thursday, 14 April, 2011, 7:35 AM

As long as you have a ScriptScope per thread, you should be able to
share the ScriptEngine & Runtime between threads.

What is the exception that you are getting? If it's a GUI program,
remember that UI elements can only be manipulated from the main
thread.

- Jeff

On Thu, Apr 14, 2011 at 1:02 AM, surangika ranathunga
<lady_ra...@yahoo.com<http://mc/compose?to=lady_ra...@yahoo.com>> wrote:
>
> Hi,
> I am using Ironpython to connect to a legacy python code from C#.
> I am not fully familiar with Ironpython, but managed to get it working for a 
> single-threaded application.
> This is how I implemented this:
>
>                 ScriptEngine engine = Python.CreateEngine();
>                 ScriptRuntime runtime = engine.Runtime;
>                 ScriptScope scope = runtime.CreateScope();
>                 ops = engine.Operations;
>                 ScriptSource source = 
> engine.CreateScriptSourceFromFile("ironpython.py");
>                 source.Execute(scope);
>                 string class_param = rule;
>                 object[] parameters = new object[1];
>                 parameters[0] = class_param;
>                 object klass = scope.GetVariable("model_checker");
>                 object instance = ops.Invoke(klass, parameters);
>                 method = ops.GetMember(instance, "check_model");
>
> Now I want to make my application multi-threaded, and I want to have 
> concurrently running scripting engines. Essentially, these engines should 
> access the same underlying python code, and hence these scripting engines are 
> identical to each other.
> Without any change, the above code works fine for most of the time for a 
> multi-threaded application. However, there is an exception that appears from 
> time to time, and I suspect that it is due to a concurrency issue.
>
> Is there anything specific that I should do to generate multiple scripting 
> engines running in separate threads without interfering with each other?
>
> any ideas greatly appreciated
>
> _______________________________________________
> Users mailing list
> Users@lists.ironpython.com<http://mc/compose?to=Users@lists.ironpython.com>
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>



_______________________________________________
Users mailing list
Users@lists.ironpython.com<mailto:Users@lists.ironpython.com>
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

_______________________________________________
Users mailing list
Users@lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

Reply via email to