PyPy가 6.3 배 더 빠르면 CPython보다 PyPy를 사용해야하는 이유는 무엇입니까?


685

PyPy 프로젝트 에 대해 많이 들었습니다 . 그들은 사이트CPython 인터프리터 보다 6.3 배 빠르다고 주장했다 .

파이썬과 같은 동적 언어에 대해 이야기 할 때마다 속도가 가장 큰 문제 중 하나입니다. 이를 해결하기 위해 PyPy가 6.3 배 빠릅니다.

두 번째 문제는 악명 높은 GIL ( Global Interpreter Lock) 이라는 병렬 처리 입니다. 이를 위해 PyPy는 GIL-less Python을 제공 있다고 말합니다 .

PyPy가 이러한 큰 문제를 해결할 수 있다면 더 큰 채택을 방해하는 약점은 무엇입니까? 그 말을하는 것입니다, PyPy 전환에서 나 같은 사람, 전형적인 파이썬 개발자 예방 무슨 지금을 ?


30
대부분의 답변에서 답을 얻거나 (또는 ​​경우에 따라) 말하지 않아야했기 때문에 제거 된 의견. 또한이 질문의 주관성과 관련하여 제기 된 몇 가지 문제를 해결하기 위해 편집되었습니다. 사실을 사용하여 답변하고 가능한 경우 소스를 사용하여 어설 션을 백업하십시오!
Shog9

3
나는 Pypy를 많이 사용했습니다. 잘 작동하는 경향이 있습니다. 그러나 Pypy는 많은 CPU가 많은 워크로드에서 상당히 빠르지 만 실제로 I / O가 많은 워크로드에 대해서는 느립니다. 예를 들어 백 시프트 (backshift)라는 중복 제거 백업 프로그램을 작성했습니다. 많은 파일 청킹을 수행하는 초기 백업의 경우 pypy가 좋습니다. 그러나 대부분 타임 스탬프 만 업데이트하는 후속 백업의 경우 CPython이 더 빠릅니다.
dstromberg

답변:


657

참고 : PyPy는이 질문을했을 때보 다 2013 년보다 더 성숙하고 더 잘 지원됩니다. 오래된 정보로부터 결론을 도출하지 마십시오.


  1. PyPy는 다른 사람들이 빠르게 언급 했듯이 C 확장을 강력하게 지원합니다 . 그것은 가지고 있지만, 일반적으로보다 느린 파이썬 속도, 지원을하며 최고의 불확실한을합니다. 따라서 많은 모듈에는 단순히 CPython이 필요합니다 . PyPy는 numpy를 지원하지 않습니다 . PyPy는 이제 numpy를 지원합니다 . 일부 확장은 여전히 ​​지원되지 않습니다 (Panda, SciPy 등) . 변경하기 전에 지원되는 패키지 목록을 살펴보십시오 .
  2. Python 3 지원 은 현재 실험 중입니다. 방금 안정에 도달했습니다! 2014 년 6 월 20 일자로 PyPy3 2.3.1-Fulcrum이 나왔습니다 !
  3. PyPy는 때때로 많은 사람들이 파이썬을 사용하는 "스크립트"에 대해 실제로 더 빠르지 않습니다 . 이것들은 간단하고 작은 것을하는 단기 실행 프로그램입니다. PyPy는 JIT 컴파일러이기 때문에 주요 이점은 장기 실행 시간과 간단한 유형 (예 : 숫자)에서 비롯됩니다. 솔직히 PyPy의 pre-JIT 속도는 CPython에 비해 상당히 나쁩니다 .
  4. 관성 . PyPy로 이전하려면 종종 일부의 사람들과 조직에게 너무 많은 작업이 필요한 재조정이 필요합니다.

이것이 저에게 영향을 미치는 주된 이유입니다.


14
retooling에 대해 언급 한 것이 좋습니다. 예를 들어 내 웹 호스트는 Python 2.4와 2.5 중에서 선택할 수 있습니다. 내 주변의 "엔터테인먼트 소프트웨어의 주요 생산자"는 곧 업그레이드 할 계획없이 2.6을 사용하고 있습니다. 때로는 전환 비용을 파악하는 데 많은 비용과 노력이 필요할 수 있습니다.
Mike Housky

19
PyPy는 "C만큼 빠름"은 숫자에 사용되는 고도로 최적화 된 다중 스레드 캐시 인식 C 라이브러리보다 일반적인 C에 관한 것입니다. 숫자의 경우, 파이썬은 방금 큰 배열에 대한 포인터 주위를 페리하는 데 사용됩니다. PyPy가 "C만큼 빠르다"는 것은 "포인터 + 메타 데이터가 C만큼 빠르게 움직입니다"를 의미합니다. 별거 아니야 그렇다면 왜 파이썬을 전혀 신경 쓰지 않습니까? cblas와 lapacke의 함수 시그니처를 살펴보십시오.
cjordan1

12
@ cjordan1 : 나는 당신이 말하는 것을 얻지 못합니다. 높은 수준의 numpy 구문은 np.sum(M[1:2*n**2:2, :2*n**2] * M[:2*n**2:2, :2*n**2].conjugate(), axis=1)파이썬에서 매우 표현력이 좋으며 ( ?) 파이썬을 과학계에 매우 적합하게 만듭니다. 또한 Python에서 비 집약적 인 부분을 수행하고 더 작은 집약적 루프를 위해 C로 쉘링하는 것이 일반적이며 사용 가능한 전략입니다.
Veedrac

26
@Veedrac 그게 내가 의미 한 바야. "cblas 및 lapacke의 함수 시그니처를 살펴보십시오"와 같이 길고 사용하기 어려우므로 포인터를 사용하여 포인터와 메타 데이터를 페리로 연결하는 이유를 즉시 이해할 수 있습니다.
cjordan1

5
@ tommy.carstensen이 곳은 깊이 들어가기에 좋은 곳은 아니지만 시도해 볼 것입니다. 1. 이것은 내가 지금보다 그것을 쓸 때 훨씬 더 사실이었다. 2. "스크립트"는 종종 IO가 무겁습니다. PyPy의 IO는 여전히 CPython보다 여전히 느립니다. 예전에는 상당히 느 렸습니다. 3. PyPy는 문자열을 처리 할 때 CPython보다 느리게 사용되었습니다. 이제는 종종 나아지거나 거의 나 빠지지 않습니다. 4. 많은 "스크립트"는 접착제 코드 일뿐입니다.이 경우 인터프리터가 더 빠르더라도 전반적인 런타임이 향상되지는 않습니다. 5. PyPy의 예열 시간은 더 커졌습니다. 짧은 실행 스크립트는 많은 핫 코드를 생성하는 경우가 거의 없었습니다.
Veedrac

104

이 사이트는 PyPy가 CPython보다 6.3 배 빠르다고 주장 하지 않습니다 . 인용 :

모든 벤치 마크의 기하학적 평균은 CPython보다 0.16 또는 6.3 배 빠릅니다.

이것은 귀하가 작성한 총괄 진술과 는 매우 다른 진술이며, 차이점을 이해하면 "PyPy 사용"이라고 말할 수없는 이유 중 적어도 하나를 이해할 것입니다. 내가 따끔 거림처럼 들릴지 모르지만,이 두 문장이 완전히 다른 이유를 이해하는 것이 중요합니다.

그것을 분해하려면 :

  • 이들이 작성한 진술은 사용한 벤치 마크에만 적용됩니다. 프로그램이 벤치 마크 중 하나와 정확히 같은 경우를 제외하고는 프로그램에 대해 아무 것도 말하지 않습니다.

  • 이 진술은 벤치 마크 그룹의 평균 에 대한 것입니다. PyPy를 실행하면 테스트 한 프로그램에 대해서도 6.3 배의 성능 향상을 가져올 것이라는 주장은 없습니다.

  • PyPy가 CPython이 실행 하는 모든 프로그램을 더 빠르게 실행할 것이라는 주장은 없습니다 .


15
물론 PyPy가 모든 Python 코드를 더 빨리 실행할 것이라는 주장은 없습니다. 그러나 모든 순수한 파이썬 응용 프로그램을 가져 가면 PyPy에서 CPython에서 훨씬 더 빠르게 (> 3 배) 실행됩니다.
Robert Zaremba

18
처음 두 개의 글 머리 기호 중 어느 것도 의미가 없습니다. 벤치 마크에서 "프로그램에 대해 전혀 아무것도 없다"고 어떻게 말할 수 있습니까? 벤치 마크가 모든 실제 응용 프로그램의 완벽한 지표는 아니라는 것이 명백하지만, 지표로 유용 할 수 있습니다. 또한 벤치 마크 그룹의 평균을보고하는 사람들에 대해 오도 된 내용을 이해하지 못합니다. 그들은 평균이라고 꽤 명확하게 말합니다. 프로그래머가 평균이 무엇인지 이해하지 못하면 언어 성능보다 훨씬 더 심각한 문제가 있습니다.
Sean Geoffrey Pietz

6
@SeanGeoffreyPietz-PyPy 사이트가 오해의 소지가 있다고 주장하지는 않았습니다. 그들은 결과를 정확하게 제시했습니다. 그러나 원래의 질문은 그것들을 잘못 인용했으며 저자가 '평균'이라는 단어의 중요성을 이해하지 못했음을 보여주고있었습니다. 많은 개별 벤치 마크가 6.3 배 빠르지는 않습니다. 다른 유형의 평균을 사용하면 다른 값을 얻게되므로 "6.3 x 빠름"은 "형상 평균 6.3 x 빠름"에 대한 적절한 요약이 아닙니다. "그룹 A는 그룹 B보다 Z 배 빠릅니다."는 너무 모호하여 의미가 없습니다.
spookylukey

6
-1 : @spookylukey 귀하는 벤치 마크 모음이 주장을 뒷받침하는 증거를 제공하지 않고 편향되어 있다고 제안하는 것 같습니다. 비판은 항상 증거로 백업되어야합니다!
Evgeni Sergeev

5
@EvgeniSergeev-아니오, 모든 벤치 마크가 바이어스되었음을 암시합니다! 물론 고의적으로 그런 것은 아닙니다. 유용한 프로그램의 공간은 무한하고 엄청나게 다양하며, 일련의 벤치 마크는 해당 벤치 마크의 성능 만 측정합니다. "PyPy가 CPython보다 얼마나 빠릅니까?" "Fred가 Joe보다 훨씬 빠르면?"라고 묻는 것과 같습니다. 이것이 OP가 알고 싶어하는 것입니다.
spookylukey

74

pypy는 100 % 호환되지 않고 컴파일하기 위해 8 기가의 램을 필요로하고 움직이는 목표이며 cpython이 안정적인 곳에서 실험적입니다. ) 이미 배포되어 있습니다.

Pypy는 결코 참조 구현이 될 수는 없지만 좋은 도구입니다.


2
pypy.org/download.html 에 따르면 PyPy는 8이 아닌 컴파일하기 위해 4GB의 RAM이 필요합니다 (64 비트 시스템에서). 필요한 경우 3GB 미만으로 수행 할 수있는 옵션이 있습니다.
knite

4
@knite 1 : 2015 년에 새로 도입 된이 문서는 역사적으로 8GB를 읽었습니다. 2 : 실제로 2015 년에는 최소 8 개가 필요하며 6-7 개는 무료입니다.
Tritium21

4
빌드 또는 배포 를 사용하는 경우 컴파일하기위한 메모리 요구 사항은 그다지 중요하지 않습니다 . "움직이는 목표와 실험적인 것"에 관해, 몇 가지 예를들 수 있습니까? 사람들이 야간 빌드 나 소스가 아닌 릴리스 빌드를 사용하는 경우 기능에 대한 합리적인 기대가 없습니까?
smci

@smci 이것은 고대 데이터를 기반으로 한 고대의 질문이며 고대 답변이 있습니다. 이 질문과 모든 답변을 4 년 전 pypy 상태의 역사적 내용으로 간주하십시오.
Tritium21

1
@ Tritium21 : 나는 현재 답변에만 관심이 있습니다. 무엇입니까? 당신은 편집 말을 답변하는 것 같아서 "였다 ... 파이썬의 버전 2.x 대 pypy을 비교, 2013 년" (질문에 "6.3 - 기하 평균 '주장은 오래된입니다 또한 경우 등 2017 년 4 월 중 7.5x를 청구하지만 벤치 마크에 따라 달라집니다 ... ) 그런 다음 편집해야합니다 (버전 번호, 최신 데이터 등) 벤치 마크 스위트가 관련성이 없다고 생각합니다. 요즘 CPU에서 스크립팅 언어로 레이트 레이싱. 내가 찾았어요 pybenchmarks.org
SMCI

37

두 번째 질문은 대답하기가 더 쉽다는 것입니다. 모든 코드가 순수한 파이썬이라면 기본적으로 PyPy를 드롭 인 대체품 으로 사용할 수 있습니다. 그러나 널리 사용되는 많은 라이브러리 (일부 표준 라이브러리 포함)는 C로 작성되고 Python 확장으로 컴파일됩니다. 이 중 일부는 PyPy와 함께 작동하도록 만들 수 있지만 일부는 불가능합니다. PyPy는 Python과 동일한 "앞으로 향한"도구를 제공합니다. 즉, 파이썬입니다. 그러나 내부는 다르므로 해당 내부와 상호 작용하는 도구는 작동하지 않습니다.

첫 번째 질문에 관해서는 첫 번째 질문과 비슷한 Catch-22라고 생각합니다 .PyPy는 속도를 향상시키고 다른 코드와의 상호 운용성을 향상시키기 위해 빠르게 진화하고 있습니다. 이것은 공식보다 더 실험적으로 만들었습니다.

PyPy가 안정적인 상태가되면 더 널리 사용되기 시작할 수 있습니다. 또한 파이썬이 C 기반에서 벗어나는 것이 좋을 것이라고 생각합니다. 그러나 그것은 한동안 일어나지 않을 것입니다. PyPy는 아직이 임계 질량에 도달하지 않은 대부분 의 사람들이 격차를 채우기 위해 동기를 부여 것입니다 당신이 원하는 것 모든 것을 할 수있는 자신에 대한 유용한 충분합니다.


17
나는 C가 언제 어디서나 가고있는 언어라고 생각하지 않습니다 (기꺼이 말할 것입니다, 그것은 우리의 삶에서 사라지지 않을 것입니다). 어디서나 실행될 다른 언어가있을 때까지 우리는 C를 갖게 될 것입니다. (JVM은 C로 작성되었습니다. 심지어 "모든 곳에서 실행되는 언어"는 모든 곳에서 C가 필요합니다.) 그렇지 않으면 대부분이 게시물에 동의합니다 요점.
Tritium21

7
@ Tritium21 : 네, 저기 편집 중입니다. 나는 기존의 C에 대해서는 괜찮지 만 C에 대한 Python의 의존성은 매우 해롭고 PyPy는 그 이유의 훌륭한 예라고 생각합니다. 이제 우리는 더 빠른 Python을 얻을 수있는 기회를 얻었지만 C에 의존하여 수년에 걸쳐 넘어졌습니다. 파이썬이 두 발로서는 것이 훨씬 낫습니다. 파이썬 자체가 C로 작성 되더라도 괜찮습니다. 그러나 문제는 사람들이 C에 의존하는 방식으로 파이썬을 확장하도록 장려하는 확장 메커니즘의 존재입니다.
BrenBarn

4
이중 모서리 칼-파이썬을 인기있게 만든 요소 중 하나는 다른 응용 프로그램을 확장하고 다른 응용 프로그램으로 확장 할 수 있다는 것입니다. 당신이 그것을 빼앗아 가면 파이썬에 대해 이야기 할 것이라고 생각하지 않습니다.
Tritium21

10
@BrenBarn 파이썬이 C에 의존하는 것이 해롭다 고 주장하는 것은 완전히 어리석은 일입니다. 파이썬의 C-API가 없다면, 전체 숫자 / 과학 생태계와 GUI 인터페이스를 포함하여 파이썬이 10 대 후반 (90 년대 후반) 동안 얻은 정말 강력한 라이브러리와 훌륭한 interop은 불가능했을 것입니다. 이러한 포괄적 인 진술을하기 전에 파이썬의 전체 사용에 대한 관점을 살펴 보도록하자.
Peter Wang

4
@PeterWang 모든 라이브러리는 파이썬으로 작성 될 수 있지만, 빠르지는 않습니다. BrenBarn의 말에 따르면 이제 파이썬으로 충분히 빨리 만들 수 있으므로 해당 라이브러리를 파이썬으로 작성할 수는 있지만 C 라이브러리를 사용할 수있는 능력을 잃어 버릴 수 있기 때문에 그 기회를 거부합니다. C 라이브러리의 존재가 나쁜 것이 아니라 빠른 라이브러리를 만드는 유일한 방법은 C를 사용하는 것입니다.
vikki

14

이 주제에 대해 작은 벤치 마크를 수행했습니다. 다른 많은 포스터는 호환성에 대해 좋은 지적을했지만 PyPy는 비트를 움직일 때 그리 빠르지 않습니다. 파이썬을 여러 번 사용하는 경우 실제로 두 개 이상의 서비스간에 비트를 변환하는 것만 존재합니다. 예를 들어, 많은 웹 응용 프로그램에서 데이터 집약적 인 CPU 집중 분석을 수행하지 않습니다. 대신 클라이언트에서 바이트를 가져 와서 일종의 데이터베이스에 저장 한 다음 나중에 다른 클라이언트로 반환합니다. 때때로 데이터 형식이 변경됩니다.

BDFL과 CPython 개발자는 놀랍도록 지능적인 사람들로 CPython이 그러한 시나리오에서 탁월한 성능을 발휘할 수 있도록 도와주었습니다. 다음은 뻔뻔한 블로그 플러그입니다 : http://www.hydrogen18.com/blog/unpickling-buffers.html . CPython에서 파생되고 전체 C 모듈 인터페이스를 유지하는 Stackless를 사용하고 있습니다. 이 경우 PyPy를 사용하는 이점을 찾지 못했습니다.


1
PyPy에는 많은 신중하게 벤치 마크가 있습니다 (불행히도 CPython과 달리 현재 사용자를 대상으로하는 벤치 마크 스위트는 없습니다). 물론 네트워크 트래픽의 경우 PyPy는 마술처럼 더 빠른 것을 만들 수 없습니다.
율리우스

1
Julian, PyPy 직원들은 수년 동안 특정 벤치 마크 제품군의 런타임을 개선하기 위해 많은 노력을 기울이고 있음에 주목할 가치가 있습니다. 어느 정도까지는이 벤치 마크 세트에 대한 최적화를 "과적 합"하고 내 경험상 순수한 수치 계산 (어쨌든 Fortran 또는 C99에서 더 나은)을 제외하고는 PyPy를 더 많이 얻지 못했습니다. CPython보다 2 배 빠릅니다.
Alex Rubinsteyn

9
@AlexRubinsteyn 그러나 PyPy에서 일하는 사람들의 견해는 일반적으로 PyPy가 CPython보다 느린 경우를 발견하고 합리적인 벤치 마크로 바꿀 수 있다면 스위트에 추가 될 가능성이 있다는 것입니다.
gsnedders

1
귀하의 블로그를 확인했습니다. 결과에서 일반 파이썬 쌍 (피클, StringIO)은 파이썬이 파이톤보다 ~ 6.8 배 빠릅니다. 이것이 유용한 결과라고 생각합니다. 결론적으로, pypy 코드 (일반 파이썬입니다!)는 cpython 코드가 아닌 C 코드 (cPickle, cStringIO)보다 느립니다.
Caleb Hattingh 2019

1
@gsnedders 나는 기반의 벤치 마크 제안했다 rinohtype여러 차례를 . 아직 스위트에 추가하지 않았습니다.
Brecht Machiels

12

Q : PyPy가 CPython과 비교할 때 이러한 큰 과제 (속도, 메모리 소비, 병렬 처리)를 해결할 수 있다면, 더 넓은 채택을 방해하는 약점은 무엇입니까?

A : 첫째, PyPy 팀이 일반적으로 속도 문제 해결할 수 있다는 증거는 거의 없습니다 . 장기적인 증거는 PyPy가 CPython보다 느린 특정 Python 코드를 실행한다는 것을 보여 주며이 단점은 PyPy에 매우 깊이 뿌리 박힌 것 같습니다.

둘째, PyPy의 현재 버전은 다소 큰 경우 CPython보다 훨씬 많은 메모리를 소비합니다. PyPy는 아직 메모리 소비 문제를 해결하지 못했습니다.

PyPy가 언급 된 큰 과제를 해결하고 일반적 으로 CPython보다 더 빠르고, 메모리가 부족하고, 병렬 처리에 더 친숙한 지 여부는 단기적으로 해결할 수없는 공개 된 질문입니다. 어떤 사람들은 PyPy가 모든 경우에 CPython 2.7 및 3.3을 지배 할 수 있는 일반적인 솔루션 을 제공 할 수 없을 것이라고 내기하고 있습니다 .

의심의 여지가있는 PyPy가 일반적으로 CPython보다 나은 경우, 더 광범위한 채택에 영향을 미치는 주요 약점은 CPython과의 호환성입니다. CPython이 더 넓은 범위의 CPU 및 OS에서 실행된다는 사실과 같은 문제도 있지만 이러한 문제는 PyPy의 성능 및 CPython 호환성 목표와 비교할 때 훨씬 덜 중요합니다.


Q : CPython을 PyPy로 대체 할 수없는 이유는 무엇입니까?

A : PyPy는 CPython과 100 % 호환되지 않으므로 CPython을 시뮬레이션하지 않습니다. 일부 프로그램은 C 바인딩, Python 객체 및 메소드의 C 구현 또는 CPython 가비지 수집기의 증가 특성과 같이 PyPy에없는 CPython의 고유 한 기능에 여전히 의존 할 수 있습니다.


이 답변은 벤치 마크를 인용하거나 참조를 제공하지 않습니다.
qwr

7

CPython에는 참조 계산 및 가비지 콜렉션이 있으며 PyPy에는 가비지 콜렉션 만 있습니다.

따라서 객체는 이전에 삭제되는 경향이 있으며 __del__CPython에서보다 예측 가능한 방식으로 호출됩니다. 일부 소프트웨어는이 동작에 의존하므로 PyPy로 마이그레이션 할 준비가되지 않았습니다.

일부 다른 소프트웨어는 두 가지 모두에서 작동하지만 사용하지 않는 객체는 일찍 해제되므로 CPython에서는 메모리를 덜 사용합니다. (이것이 얼마나 중요한지, 그리고 다른 구현 세부 사항이 메모리 사용에 영향을 미치는 것을 나타내는 측정은 없습니다.)


17
__del__CPython에서도 초기 또는 전혀 부름에 의존하는 것은 잘못이라는 점을 강조해야합니다 . 당신이 그것을 넣을 때, 그것은 일반적으로 작동하고 어떤 사람들은 그것을 보장한다는 의미로 가져갑니다. 객체를 참조하는 것이 참조주기에 걸리는 경우 (이는 다소 쉬운 방법입니다. 현재 예외를 검사하지 않은 방식으로 검사하면 참조주기가 생성된다는 것을 알고 있습니까?) 다음주기 GC까지 종결이 무기한 지연됩니다. (이 될 수 없습니다 ). 객체 자체가 참조 사이클의 일부이면 (파이썬 3.4 이전) 전혀__del__ 호출되지 않습니다 .

3
CPython에서 오브젝트 당 오버 헤드는 더 높으며, 많은 오브젝트를 작성하기 시작하면 많은 것이 중요합니다. PyPy는 기본적 으로 슬롯 과 동등한 기능을 수행한다고 생각 합니다.

4

많은 프로젝트의 경우 속도 측면에서 서로 다른 파이썬 사이에 실제로 0 %의 차이가 있습니다. 그것은 엔지니어링 시간이 지배하고 모든 파이썬이 같은 양의 라이브러리 지원을하는 곳입니다.


1
프로젝트가 그렇게 단순하다면 그것은 중요하지 않지만 모든 언어의 구현에 대해서도 동일하게 말할 수 있습니다. 상대적으로 성능이 좋은 ABI를 통해 다른 라이브러리의 기능을 모으는 것만으로도 관련이 없습니다.

1
단순한 것과는 아무런 관련이 없습니다. 엔지니어링 시간에는 피드백 루프가 중요합니다. 때로는 런타임보다 훨씬 중요합니다.
Stephan Eggermont

1
글쎄, 당신은 매우 모호하게 말하고 있습니다 (엔지니어링 된 내용, 제약 조건 등을 참조하지 않고 엔지니어링 시간; 누가 누구에게 피드백되는지에 대한 피드백 루프를 참조하십시오). 암호화 된 참조를 거래하기보다는이 대화에서 벗어납니다.

모호한 것은 없습니다. OODA 루프 또는 PDCA를 살펴보십시오.
Stephan Eggermont

3
@user 글쎄, 한 달 동안 실행하고 1 분 동안 실행하는 한 번 실행 프로젝트는 PyPy가 1000 배 더 빠르더라도 PyPy를 사용하여 전체적으로 0.0 %의 속도 (1 개월 + 1 분 대 1 개월)를 갖습니다. Stephan은 모든 프로젝트의 속도가 0 %라고 주장하지 않았습니다.
gmatht

4

간단하게하기 위해 : PyPy는 CPython에서 부족한 속도를 제공하지만 호환성을 희생합니다. 그러나 대부분의 사람들은 속도가 아니라 유연성과 "배터리 포함"기능 (높은 호환성)으로 파이썬을 선택합니다 (아직 선호합니다).


16
"배터리 포함"란 대형 표준 라이브러리 , AFAIK
tshepang

4

PyPy가 Python보다 느린 예제를 찾았습니다. 그러나 Windows에서만 가능합니다.

C:\Users\User>python -m timeit -n10 -s"from sympy import isprime" "isprime(2**521-1);isprime(2**1279-1)"
10 loops, best of 3: 294 msec per loop

C:\Users\User>pypy -m timeit -n10 -s"from sympy import isprime" "isprime(2**521-1);isprime(2**1279-1)"
10 loops, best of 3: 1.33 sec per loop

따라서 PyPy를 생각하면 Windows를 잊지 마십시오. Linux에서는 놀라운 가속을 달성 할 수 있습니다. 예 (1과 1,000,000 사이의 모든 소수를 나열) :

from sympy import sieve
primes = list(sieve.primerange(1, 10**6))

이것은 PyPy에서 Python보다 10 (!) 배 빠릅니다. 그러나 창문에는 없습니다. 3 배나 빠릅니다.


흥미 롭습니다! 더 많은 비교와 숫자가 좋았을 것입니다.
ben26941

1

PyPy는 잠시 동안 Python 3을 지원했지만 2018 년 4 월 2 일 Anthony Shaw 의이 HackerNoon 게시물에 따르면 PyPy3은 여전히 ​​PyPy (Python 2)보다 몇 배 느립니다.

많은 과학적 계산, 특히 행렬 계산의 경우 numpy가 더 나은 선택입니다 ( FAQ : numpy 또는 numpypy를 설치해야합니까? 참조 ).

Pypy는 gmpy2를 지원하지 않습니다. 속도를 테스트하지 않았고 프로젝트가 2014 년에 한 번 릴리스되었지만 gmpy_cffi를 대신 사용할 수 있습니다 .

Project Euler 문제의 경우 PyPy를 자주 사용하며 간단한 수치 계산으로 종종 from __future__ import division내 목적으로 충분하지만 Python 3 지원은 2018 년 현재 여전히 작동하고 있으며 64 비트 Linux에서 가장 좋은 방법입니다. 2018 년 12 월 현재 최신 Windows PyPy3.5 v6.0은 베타 버전입니다.


0

지원되는 파이썬 버전

파이썬 을 인용하려면 :

가독성이 중요합니다.

예를 들어 Python 3.7은 데이터 클래스를 도입 했으며 Python 3.8은 fstring =을 도입 했습니다 .

Python 3.7 및 Python 3.8에는 더 중요한 다른 기능이있을 수 있습니다. 요점은 PyPy가 현재 Python 3.7 또는 Python 3.8을 지원하지 않는다는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.