10 개 정도의 C 구조체가 혼합 된 수십 개의 파일이 있습니다. 분석을 위해 파일의 각 구조체를 반복 할 수 있어야하고 파이썬 코드에서이 분석을 수행 할 수 있어야합니다. 나는 파일에 전혀 쓸 필요가 없다.파이썬에서 큰 바이너리 파일을 구문 분석하는 가장 빠른 방법
파일이 단순 반복 구조체가 아니기 때문에 numpy가 도움이 될 것이라고 생각하지 않습니다. struct.unpack 내가 너무 느리다는 것을 알게된다.
내 아이디어는 Cython을 사용하고 파일을 mmap 한 다음 불필요한 복사를 피하기 위해 반복하여 Cython C 구조체에 버퍼를 캐스팅하는 것입니다. 비록 내가이 접근법에 부딪혔다 고해도, Cython C 구조체 포인터를 직접 사용할 수없고, 파이썬 래퍼 클래스를 효과적으로 작성해야 쓰기가 더 느리고 지겨워진다. 누구든지이 문제를 해결할 방법을 알고 있습니까?
다른 접근 방식이 효과가 있을지 궁금한가요? 나는 ctypes를 아직 고려하지 않았다.
실제로 큰 이진 파일과 함께'struct.unpack'을 사용하고 실제 속도 문제가 없습니다. PyPy를 사용해 보셨습니까? 제 생각에는'struct.unpack'은 단순한 타입을 사용하기 때문에'PyPy'에 의해 매우 최적화되어야합니다. 그래서 당신에게 필요한 속도 향상을 줄 수 있습니다. – tamasgal
@septi 내 기본 Cython 구현은 76 초 및 pypy 26s 복용 CPython struct.unpack에 비해 2 초 걸립니다 – stgtscc