상당히 큰 NumPy 배열 (수백 메가 바이트)을 처리하는 Python 프로그램이 있습니다.이 배열은 pickle 파일 (파일 당 1 ~ 100MB 배열)에 디스크에 저장됩니다. 데이터에 대한 쿼리를 실행하려면 pickle을 통해 전체 배열을로드 한 다음 쿼리를 수행하십시오 (따라서 OS가 파이썬 프로그램의 관점에서 볼 때 전체 배열은 메모리에 저장됩니다) . 주로 NumPy 배열에서 벡터화 된 연산을 사용할 수 있다는 것은 각 항목을 통해 for 루프를 사용하는 것보다 훨씬 빠르다고 믿었 기 때문에 주로이 작업을 수행했습니다.NumPy 배열을 통한 반복적 인 지연 평가
저는 메모리 제한이있는 웹 서버에서이 프로그램을 실행하고 있습니다. 필자는 데이터에서 실행되는 여러 가지 종류의 쿼리를 사용하여 개별 피클 파일에서 데이터의 일부를로드하고 처리 한 후 다음 청크로 진행할 때 많은 복잡성이 추가되는 코드 "청킹"을 작성합니다. 이러한 큰 배열을 처리하는 모든 기능에 대해 "청킹"을 투명하게 만드는 것이 바람직합니다.
이상적인 솔루션은 디스크의 데이터 블록을 주기적으로로드 한 다음 하나씩 배열 값을 전달하는 것과 같은 것 같습니다. 이렇게하면 개별 쿼리 기능 부분에서 별도의 작업을 수행하지 않고도 프로그램에 필요한 메모리 양이 크게 줄어 듭니다. 이런 식으로 할 수 있습니까?
유용한 참고 자료 : 이것을 "코어 밖"작업이라고합니다. – erich