2010-12-18 3 views
4

나는 잠시 동안 명령 행 Python 스크립트를 작성해 왔지만 최근에는 속도에 실망감을 느꼈다.응답 속도가 빠른 명령 행 스크립트

나는 처리 속도 나 디스패치 작업 또는 다른 명령 줄 도구 관련 프로세스 (일반적으로 설계/구현 문제)에 대해 말하는 것이 아니라 도움말을 얻기 위해 도구를 실행하는 방법에 대해 이야기하고 있습니다. 메뉴를 선택하거나 최소 정보를 표시하십시오. 예를 들어

는 의욕이 0.080scs 주위에 있고 GIT가 0.030scs

에서 나는 의욕의 소스 코드에 보았다입니다 (이것은 파이썬은 결국입니다)하지만 대답은 여전히 ​​빠른 응답 스크립트를 회피한다 가질 나를.

제가 생각하기에 그들은 imports라고 생각합니다. 어떻게 관리 하느냐에 따라 느려지는 초기 이유가 있습니다. 그러나 빠른 실행, 빠른 응답 명령 행 스크립트를위한 최고의 연습이 Python에 있습니까?

OS 및 optparse의를 가져오고 실행 단일 파이썬 스크립트 주()이 바로 실행하는 것보다 5 배 느린 ...

을 내 컴퓨터에 0.160scs 그냥 도움말 메뉴를 표시하는 데 걸리는 일부 인수 옵션을 구문 분석 젠장!

편집 :이 C로 작성하지만 의욕 부분은 여전히 ​​유효하고, 아니, pyc는 (적어도 나에게) 큰 개선 기분이 안 될 때 나는 자식을 언급하지 말았어야

.

편집 2 : 게으른 수입은 의욕의 속도 향상에 중요하지만

, 그들은 일반 파이썬 스크립트의 속도 저하에 처럼, 그들 pkg_resources으로 자동 생성 된 스크립트를 가지고되지 않습니다

from pkg_resources import load_entry_point 

pkg_resources를 사용하지 않는 스크립트를 수동으로 생성 한 경우 적어도 2 배의 속도가 증가해야합니다.

그러나! pkg_resources는 버전 종속성에 대한 좋은 방법을 제공하므로 기본적으로 사용하지 않는 것은 가능한 버전 충돌을 의미한다는 것을 알고 있어야합니다.

답변

7

파이썬 파일을 컴파일하는 것 외에도 Mercurial은 가져 오기를 요구에 맞게 수정하므로 실제로 시작 시간이 단축됩니다. demandimport 모듈에서 자체 가져 오기 기능으로 __builtin__.__import__을 설정합니다.

당신은 HG 스크립트를 보면의는/usr/lib 디렉토리/(또는 당신의 시스템에있는 곳), 다음과 같은 라인에 자신이를 볼 수 있습니다

try: 
    from mercurial import demandimport; demandimport.enable() 
except ImportError: 
    import sys 
    sys.stderr.write("abort: couldn't find mercurial libraries in [%s]\n" % 
        ' '.join(sys.path)) 
    sys.stderr.write("(check your install and PYTHONPATH)\n") 
    sys.exit(-1) 

당신이 demandimport를 변경하는 경우 회선을 pass으로 변경하면 시작 시간이 크게 증가합니다. 내 컴퓨터에서는 대략 두 배로 보인다.

demandimport.py를 연구하여 자신의 프로젝트에 비슷한 기술을 적용하는 방법을 알아 보는 것이 좋습니다.

P. 힘내, 내가 알기 론, C로 작성 되었기 때문에 빠른 시작 시간을 가지고 있다는 것에 놀라지 않을 것이다.

+0

여기에 문제가있는 것 같습니다. 파이썬에서이 문제를 해결하는 "기본"접근 방식이 없다는 것에 놀랐습니다. 쉬운 설명을 주셔서 감사합니다. – alfredodeza

0

죄송 합니다만, 귀찮게하고있는 것은 0.08 초가 아닙니다. 루프 내에서 수 백개의 파이썬 스크립트를 호출하는 "outter"쉘 (또는 다른 언어) 스크립트를 실행하는 것처럼 느껴질지라도 - 이것이 시작 시간에 차이가 나는 유일한 방법입니다. 따라서 귀하의 질문에이 중요한 정보를 보류하거나 귀하의 아버지는 this guy입니다.

그래서 파이썬 프로세스 hundereds를 호출하는 외부 스크립트가 있다고 가정하면이 외부 스크립트를 파이썬으로 작성하고 동일한 프로세스에서 필요한 파이썬을 가져 와서 거기에서 실행하십시오. 이제 각 스크립트 실행을 위해 해석기 시작 및 모듈 가져 오기가 생략됩니다.

예를 들어 수은에도 적용됩니다. "mercurial"과 적절한 서브 모듈과 함수를 가져 와서 동일한 명령 줄 인수와 동일한 작업을 수행 할 수 있습니다.