(에 StackOverflow에 첫 번째 질문, :)가 기쁘다)가져 오기 모듈은 매우 느린
내가 IronPython의 2.7.1 및 C# .NET 4.0을 사용하고 있습니다를 2.7.1.
저는 파이썬 스크립트를 시작하기 위해 C#을 사용합니다. 많은 시간 동안 가져온 약 20 개의 개인 모듈이 있습니다. 예 :
module1.py, module2.py, module3.py, module4.py 및 main_script.py가있는 경우
main_script.py 수입 모듈 1과 모듈 2
모두 모듈 1과 모듈 2 수입 module3.
모듈 1과 module3 수입 module4
등
모듈의 코드 라인의 많은 양을 가질 수 있습니다.
내가 보는 것은 main_script.py를 실행할 때 모듈을 가져 오는 데 약 4-5 초가 걸리는 것입니다.
pyc.py를 사용하여 dll의 모든 모듈을 컴파일하고 ngen을 사용하려고했지만 myEngine.Runtime.LoadAssembly()를 사용하여이 dll을 추가 할 때 차이점을 발견하지 못했습니다.
그런 다음 pyc 파일을 가져 오기 위해 py_compile.py를 사용하려고했지만 IronPython.Runtime.FunctionCode 유형이 IronPython.Modules.MarshalWriter 클래스 (WriteObject (object o))에서 지원되지 않는 것으로 보입니다. (컴파일 할 때 "unmarshallable object"예외가 발생했습니다.)
저는 파이썬이나 IronPython에 익숙하지 않고 어쩌면 언어의 모든 미묘함을 이해하지 못했습니다. 솔루션을 찾기 위해 인터넷을 검색하지만 지금 당장 붙어있는 것 같아요.
가져 오기 성능을 향상시킬만한 아이디어가 있습니까?
확인. 답변 해 주셔서 감사합니다. 매우 명확합니다. 효과적으로 스크립트는 매우 짧기 때문에 스크립트를 실행하는 것보다 모듈을 가져 오는 데 더 많은 시간이 걸리는 경우가 있습니다. 필자의 주요한 문제는 어떤 경우에는 수백 개의 스크립트를 실행해야하며 매번 가져 오기 프로세스를 수행해야한다는 것입니다. 하지만 어쨌든, 귀하의 답변에 대해 대단히 감사드립니다. – GradlonGwen
질문을 표현한 방식에 따라 C# 응용 프로그램에 IPy를 포함한다고 가정합니다. 가져온 것을 하나의 스코프로 처리하려고 시도한 다음 스크립트에서 가져올 수있는 전역 모듈로 해당 스코프를 사용했습니다. 그게 더 나은 성능을 얻을 수 있을까요? 또는 스크립트가 남은 변수에 의해 오염되지 않는다고 확신하는 경우 스크립트 범위를 다시 사용할 수 있습니다 (즉, 스크립트에서 직접 변수를 다시 초기화해야 함). – Vassi
늦게 응답하여 죄송합니다. 다른 과목에서 일하기. 우리 시스템 덕분에 모든 스크립트가 전역 모듈로 사용될 스코프를 만들 수 없습니다. 왜냐하면 각 스크립트는 실행 후 죽은 다른 프로세스에서 실행되기 때문입니다. 우리는 파이썬에서 메모리 관리에 문제가 있습니다. (많은 양의 데이터가 garbaged되지 않고 이유를 알지 못합니다.) 우리가 발견 한 유일한 해결책은 각 스크립트를 분리 프로세스에서 실행하는 것입니다. – GradlonGwen