과학 컴퓨팅 분야에서 파이썬 응용 프로그램을 작성 중입니다. 현재 사용자가 GUI로 작업하고 새로운 물리 시뮬레이션을 시작하면 인터프리터는 Traits
및 Mayavi
과 같이 시뮬레이션에 필요한 여러 모듈을 즉시 가져옵니다. 이 모듈은 무거 우며 가져 오기에는 너무 오래 걸리고 사용자는 계속하기 전에 ~ 10 초 정도 기다려야합니다.사전 임포트 모듈 용 파이썬 스레드
나는 이것을 고칠 수있는 것으로 생각했다. 나는 그것을 설명 할 것이고 아마도 다른 누군가가 이미 그것을 구현했다. 그렇지 않으면 나는 그것을 스스로 할 수도있다.
내가 원하는 것은 비동기 적으로 모듈을 반입 할 별도의 스레드입니다. 아마도 threading.Thread
의 하위 클래스가 될 것입니다.
importer_thread = ImporterThread()
importer_thread.start()
# ...
importer_thread.import('Mayavi')
importer_thread.import('Traits')
# A thread-safe method that will put the module name
# into a queue which the thread in an inifine loop
# ...
# When the user actually needs the modules:
import Mayavi, Traits
# If they were already loaded by importer_thread, we're good.
# If not, we'll just have to wait as usual.
그래서 당신이 이런 일을 알고 않습니다
은 여기에 사용 예제? 그렇지 않다면 디자인에 대한 제안 사항이 있습니까?
당신의 PYTHONPATH는 무엇입니까? 이 모듈들은 어디에 위치해 있습니까? Windows 공유 드라이브 또는 단순히 느린 다른 기능을 사용하고 있습니까? –
아니요, 그들은 보통'site-packages'에 설치됩니다. 로드가 많이 필요하기 때문에 본질적으로 느립니다. 나는 이미 메일 링리스트에서 이것을 논의했다. –
아이디어를 구현할 수있는 명확한 방법이있는 것처럼 보입니다. 왜 그냥 해보지 그래? 비록 키워드이기 때문에 당신이 당신의 메소드를 "import"라고 부를 수 있다고 생각하지는 않습니다. 그리고 대기열은 아마 과잉이다. 앱이 시작될 때 스레드를 시작하고 모듈의 하드 코드 된 목록을 가져 오는 함수를 호출하게 할 수 있습니다. – FogleBird