Ноябрь 15, 2009 – 1:20 дп
Последние 3 месяца были потрачены на одну из частей распределенной системы, выполняющей некоторые бизнес-задачи. В связи с тем, что проект начат недавно, было принято решение об использовании DLR+IronPython в полный рост. Эта компонента не стала исключением. Итого 1 месяц потрачено на реализацию, 2 месяца – на функциональное, интеграционное, нагрузочное тестирование и доводку. Рабочая среда представляет собой сервер с двумя процессорами Opteron. И вот тут начались проблемы – посыпались ошибки типа
IronPython.Runtime.Exceptions.ImportException: Cannot import name Struct
в IronPython.Runtime.Importer.ImportFrom(CodeContext context, Object from, String name)
в Microsoft.Scripting.Utils.InvokeHelper`4.Invoke(Object arg0, Object arg1, Object arg2)
в Microsoft.Scripting.Interpreter.CallInstruction.Run(InterpretedFrame frame)
в Microsoft.Scripting.Interpreter.Interpreter.RunInstructions(InterpretedFrame frame)
в Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
в Microsoft.Scripting.Interpreter.LightLambda.Run2[T0,T1,TRet](T0 arg0, T1 arg1)
в IronPython.Compiler.PythonScriptCode.Run(Scope scope)
в IronPython.Compiler.RuntimeScriptCode.InvokeTarget(LambdaExpression code, Scope scope)
в Microsoft.Scripting.Hosting.ScriptSource.Execute(ScriptScope scope)
.....
System.Exception: Can't pickle IronPython.Runtime.Types.BuiltinFunction: it's not the same object as copy_reg._reconstructor
в Microsoft.Scripting.Actions.Calls.MethodCandidate.Caller.Call(Object[] args, Boolean& shouldOptimize)
в IronPython.Runtime.Types.BuiltinFunction.BuiltinFunctionCaller`2.Call1(CallSite site, CodeContext context, TFuncType func, T0 arg0)
в Microsoft.Scripting.UpdateDelegates.UpdateAndExecute3[T0,T1,T2,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2)
в serialize$67(Closure , PythonFunction , Object )
в IronPython.Compiler.PythonCallTargets.OriginalCallTarget1(PythonFunction function, Object arg0)
в CallSite.Target(Closure , CallSite , Object , Object )
в Microsoft.Scripting.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](CallSite site, T0 arg0, T1 arg1)
в _Scripting_(Object[] , Object )
.....
Стек исключения явно указывает на то, что ошибки где-то в самом ядре DLR или IronPython и они явно происходят из-за многопроцессорности системы. В результате был написан минимальный код, на котором воспроизводятся подобные ошибки на многопроцессорных конфигурациях и Core2 Quad.
Читать дальше »
Теги: Языки программирования | Комментарии »