그래서 여기에 내 문제가 있습니다 : 파이썬에서 코드를 작성하지만, 너무 느린 코드의 일부분에서 성능을 향상시켜야합니다. 좋은 (그리고 쉬운) 솔루션은 cython을 사용하는 것 같습니다. 나는 그것을 시도하고 좋은 결과를 얻었다. 문제는 내 파이썬 코드에서 assert 문을 사용한다는 것입니다. cython을 사용하기 전에 Python 코드를 -OO 옵션과 함께 컴파일하여 어설 션 테스트를 실행하지 않는 버전을 제공 할 수 있으며 여전히 디버그를위한 어설 션을 가질 수 있습니다. 그러나 cython으로 컴파일 된 파일은 항상 어설 션을 실행하는 것처럼 보입니다. 어썰 토션을 제거 (또는 제거하지 않음)하기 위해 cython 컴파일로 전달할 수있는 옵션이 있습니까?cython에서 컴파일 할 때 python 어설 션을 제거하는 방법은 무엇입니까?
답변
C 전처리 매크로 PYREX_WITHOUT_ASSERTIONS
을 정의하면 Cython이 어설 션을 건너 뜁니다. 따라서 생성 된 C 파일을 컴파일 할 때 -DPYREX_WITHOUT_ASSERTIONS
을 C 컴파일러로 전달하십시오. 이를 수행하는 방법은 빌드 프로세스에 따라 다릅니다.
이 빠른 답변에 감사드립니다. Distutils 메서드를 사용하고 있으므로 매크로를 컴파일러에 전달하는 방법을 확인해야합니다. – user521353
CYTHON_WITHOUT_ASSERTIONS도 마찬가지로 작동하지만 이전 버전과의 호환성을 위해 PYREX_WITHOUT_ASSERTIONS를 지원합니다. – robertwb
또한 PYPI (Python Package Index)에 발견하고 주사위를 사용하여 인출 할 수 있습니다 사용 pypreprocessor
.
이from pypreprocessor import pypreprocessor
pypreprocessor.parse()
#define debug
#ifdef debug
...place assert to be removed here...
#endif
이것은 기본적으로 조건부 컴파일이하는 표준 C 프리 프로세서와 동일하게 작동 :
여기에 구현입니다.
SideNote :이 모듈은 python2x 및 python3k와 호환됩니다.
면책 조항 : 저는 pypreprocessor의 저자입니다.
이렇게하면 사전 처리기가 추가되어 초기로드 시간이 길어 지지만 출력되는 바이트 코드 (.pyc)가 최적화됩니다.
- 1. 프로그래밍 방식으로 어설 션을 설정하는 방법은 무엇입니까?
- 2. Java에서 컴파일 할 때 어설 션하는 방법은 무엇입니까?
- 3. Python + nose : 로그 된 텍스트에 대한 어설 션을 하시겠습니까?
- 4. JUnit 테스트에서 다중 어설 션을 피하는 방법은 무엇입니까?
- 5. Tomcat에서 java 어설 션을 활성화하는 방법
- 6. C 컴파일러가 어설 션을 구현하는 방법?
- 7. 왜이 ViewResult가 MSpecMVC의 ShouldBeAView 어설 션을 실패합니까?
- 8. Play에서 어설 션을 활성화하십시오! 개발 모드
- 9. 에펠 redefined 함수는 자체 어설 션을 정의 할 수 있습니까?
- 10. 모든 테스트가 test/unit에 어설 션을 포함하도록 할 수 있습니까?
- 11. boost :: lower가 is_singular 어설 션을 실패하게하는 원인은 무엇입니까?
- 12. lookbehind 어설 션을 lex에서 어떻게 사용할 수 있습니까?
- 13. 삭제하는 동안 허위 _BLOCK_TYPE_IS_VALID 어설 션 오류를 제거하는 방법은 무엇입니까?
- 14. 어설 션을 호출하는 함수를 호출 할 때 프로그램의 릴리스 버전에서 제거됩니까?
- 15. Cython에서 포인터 벡터를 선언하는 방법은 무엇입니까?
- 16. Unittest는 "assertEquals (..)"과 같은 어설 션을 가지고 있어야합니까?
- 17. Django : 시스템 오류 페이지를 표시하지 않고 어떻게 어설 션을 사용합니까?
- 18. 변수가 정적인지 확인하기 위해 정적 어설 션을 추가하려면 어떻게합니까?
- 19. Regex : lookahead 어설 션을 사용하여 문자가 특정 횟수만큼 존재하는지 확인합니다.
- 20. Cython에서 고정 길이의 가변적 인 Python 객체 배열을 만들려면 어떻게해야합니까?
- 21. Windows 서비스의 어설 션
- 22. Cython에서 파일과 유사한 객체 노출하기
- 23. 리디렉션 할 때 URL에서 해시를 제거하는 방법은 무엇입니까?
- 24. uitableview를 다시로드 할 때 uilabel과 uiimageview의 오버랩을 제거하는 방법은 무엇입니까?
- 25. MPMoviePlayerController.currentPlaybackTime을 재정의 할 때 경고를 제거하는 방법은 무엇입니까?
- 26. 강조 표시 할 때 텍스트의 기존 배경색을 제거하는 방법은 무엇입니까?
- 27. Android에서 앱을 제거 할 때 위젯을 제거하는 방법은 무엇입니까?
- 28. 클릭 할 때 "점선 테두리"를 제거하는 방법은 무엇입니까?
- 29. 엘마 1.1 RC에서 jscript 어설 션을 사용하여 예외 유형을 필터링 할 수 있습니까?
- 30. IronPython Tools를 제거하는 방법은 무엇입니까?
dont 'know ...하지만 사용하려는 파일에서 파이썬 어썰트를 모두 주석 처리하는 간단한 프로그램을 작성하는 것은 어떻습니까? – Ant
+1 : 직접이 문제를 발견했습니다. 코드를 빠르게 만들 수 있도록 설계된 것이 가장 단순한 최적화를 수행하지 않는다는 것이 이상합니다. –