2015-01-13 2 views
1

저는 python2와 python3 모두에서 프로젝트를 지원하고 있습니다. 그리고 python3 인터프리터가 python2 인터프리터로로드하는 데 거의 3 배의 시간이 걸리는 것으로 나타났습니다.python3이 python2를로드하는 데 두 배의 시간이 걸리는 이유는 무엇입니까?

없는 코드

$ cat hello.py 
print('Hello World!') 
$ python -V 
Python 3.4.2 
$ time python hello.py 
Hello World! 

real 0m1.561s 
user 0m1.290s 
sys  0m0.110s 
$ python2 -V 
Python 2.7.9 
$ time python2 hello.py 
Hello World! 

real 0m0.613s 
user 0m0.513s 
sys  0m0.070s 

그리고 한 번 더 (아치 리눅스에서 실행) :

$ rm foo ; touch foo ; time python foo ; time python2 foo 

real 0m1.710s 
user 0m1.297s 
sys  0m0.103s 

real 0m1.040s 
user 0m0.667s 
sys  0m0.100s 
$ echo $PYTHONSTARTUP 

$ rm foo ; touch foo ; time python -B foo ; time python2 -B foo 

real 0m1.554s 
user 0m1.117s 
sys  0m0.123s 

real 0m0.678s 
user 0m0.557s 
sys  0m0.090s 

가 무슨 일이야?

+2

어떤 OS입니까? 어떤 특정 버전의 python2.x 및 python3.x를 실행하고 있습니까? 필자는 이전의 python3.x 버전이 대부분 "기능 구현 - 성능에 대해 걱정하지 마십시오."라는 것을 알고 있습니다. IIRC python3.3부터는 (대부분의 경우) 성능이 python2.x에 가까워지기 시작했다고 생각합니다. – mgilson

+0

정확히 스크립트가 수행하는 작업은 무엇입니까? 각 스크립트에서 사용하고있는 문자열 유형과 관련이 있다고 생각합니다. 빈 파이썬 파일을 만들고 동일한 테스트를 실행 해보십시오. 첫 번째 py3 테스트에 2 배 더 느린 이상치가 있습니다. 그렇다면 그들은 정확히 동일했습니다. –

+0

그 시간이 "로드"시간인지 어떻게 알 수 있습니까? 그것은 또한 여분의 시간을 필요로하는 "언로드"일 수 있습니다. :) – selbie

답변

0

당신이보고있는 시작 시간은 내 시스템에서 볼 수있는 것과 크게 다르다 :

$ touch py 
$ python3 py 
$ time python3 py 

real 0m0.027s 
user 0m0.019s 
sys 0m0.006s 

$ python3 -V 
Python 3.4.2 

$ time python py 

real 0m0.023s 
user 0m0.013s 
sys 0m0.008s 

$ python -V 
Python 2.7.8 

나는 당신이보고있는 일초 증가와 같은 한계 python3로 증가하지만, 아무것도를 참조하십시오. 그 차이를 유발할 수 있다고 생각할 수있는 이유는 아마도 두 가지입니다. 첫 번째는 인터프리터가 실행될 때 파이썬 시작 파일이 실행될 수 있다는 것입니다.

$ echo $PYTHONSTARTUP 
~/.pythonrc 

python3에는 시작 파일이로드되었지만 python2에는로드되지 않았는지 확인하십시오.

또한, 쓰기, 바이트 코드없이 테스트를 실행 해보십시오 :

time python -B foo 

이 환경이 설정이 아니라 인터프리터 버전 사이에 큰 차이 로컬 발행 아마.

+0

시작 파일이 없습니다. 비 바이트 코드 결과를 제 질문에 추가하겠습니다. 저의 테스트 베드로 오래된 600 Mhz 머신을 사용하고 있습니다.이 테스트 베드는 저속을 차지하지만로드 시간에 큰 차이가 없어야합니다. –

1

-S을 파이썬에 전달하여 "local site libraries"을 사용 중지하도록 설정하십시오. 내가 더 느린 ARM 박스를 가지고 놀았을 때이 점을 지나치게 빨라졌다. 예를 들어, 내가 얻을 :

time python3 -S -c pass 

약 0.076 초, 벽 시계 시간에서 실행, 바닐라 동안 :

time python3 -c pass 

는 0.247 초 정도 걸립니다. 이 옵션을 python2에 전달하면 다양한 배포판에서 저와 비슷한 속도 향상을 얻을 수 있습니다. 따라서이 경우에도 불일치를 설명하지는 않습니다. 일부 문제를 해결하는 방법 일뿐입니다!

이 스레드를 다시 시작하길 바랍니다. 구글이 이것을 지적하고 유용한 답을 얻고 싶었습니다.

관련 문제