오디오 하드웨어를 제어하는 WPF 앱이 있습니다. 여러 스레드에서 동일한 PythonEngine을 사용합니다. 이로 인해 PythonEngines Globals 사전에 누락 된 값이 때때로 나타나는 이상한 오류가 발생합니다. 디버깅/수정 방법에 대한 지침을 찾고 있습니다.C# IronPython을 여러 스레드에서 실행 중
기기에 [필터, 게인 등]이 여러 개 있습니다. 각 구성 요소에는 여러 컨트롤 [슬라이더, 토글 버튼 등]이 있습니다.
사용자가 제어 값을 변경할 때마다 하드웨어 공급 업체의 Python 스크립트를 실행해야합니다. 이 작업을 수행하기 위해 IronPython 1.1.2 (PythonEngine.Execute (code))를 사용하고 있습니다.
모든 구성 요소에는 스크립트가 있습니다. 그리고 각 스크립트는 (구성 요소의) 모든 컨트롤의 현재 값이 실행되도록 요구합니다.
시퀀스는 - 사용자가 변경> 구성 요소 스크립트 실행> 결과를 장치로 전송> 장애에 대한 응답을 확인합니다. 이 전체주기가 UI를 대기 상태로 유지하는 데 너무 오래 걸리므로 언제든지 무언가 변경됩니다. component.begininvoke (startcycle)와 같은 작업을 수행합니다.
는 Startcycle이 같이 보입니다 -
PyEngine Engine = PyEngine.GetInstance(); // this is a singleton
lock(component) // this prevents diff controls of the same component from walking over each other
{
Engine.runcode(...)
}
다른 component.begininvokes가 서로 가까이 engine.runcode가 동시에 다른 스레드에서 일어나고있는 기회가 발생
. 그것은 내가 component.begininvoke 없애 버려야 할 것 같아하지만 물건을 크롤 링하게 만들 것입니다. 어떤 아이디어?
1 년 전에이 글을 올렸지 만 비슷한 종류의 문제에 대한 해결책을 찾고 있습니다. 당신이 그 일을 끝내려고 했니? 문제를 일으키는 엔진에 동시 액세스하는 것이 아니라, 각 스레드에 대해 별도의 ScriptScope를 작성해야한다고 생각했습니다. 나는 당신이 당신의 문제를 어떻게 해결했는지 알고 싶어합니다. – Dave