2012-09-19 3 views
1

피라미드에서 호출 할 수있는 뷰에 대해 NumPy를 사용하여 일부 배열 계산을 수행하고 싶습니다. 내가 사용하고있는 배열은 꽤 큽니다 (3500x3500). 그래서 그것을로드하는 가장 좋은 장소가 반복적으로 사용되는 곳인지 궁금합니다.피라미드에서 NumPy 사용

지금 내 응용 프로그램은 단일 페이지이고 단일 호출보기를 사용하고 있습니다.

어레이가 디스크에서로드되어 변경되지 않습니다.

+0

자세한 내용이 필요합니다. 이 멀티 스레드를 실행하고 있습니까? 배열을 스레드간에 공유해야하며 수정하지 않은 단일 객체입니까? 디스크의 파일에서로드하거나 다른 계산 결과로 가져오고 있습니까? –

+0

ImportError 질문에 대한 답변 : http://stackoverflow.com/questions/8710918/installing-numpy-as-a-dependency-with-setuptools –

+0

링크 주셔서 감사합니다. 이전 의견에 대한 답변은 원래 질문에 있습니다. 스레딩에 대해서는 잘 모르겠다. – abroekhof

답변

3

배열이 스레드간에 공유 될 수있는 경우 응용 프로그램 시작시 레지스트리에 저장할 수 있습니다 (config.registry['my_big_array'] = ??). 공유 할 수없는 경우에는 항상 다른 프로세스에서 데이터를로드 할 수있는 작업자와 대기열 시스템을 사용하는 것이 좋습니다. 레지스트리의 값을 threadlocal로 만들고, 변수가 이미 없으면 새 배열을 저장하여 해킹 할 수 있습니다. 그런 다음 스레드 당 배열 복사본을 갖게 될 것입니다. 그 큰 것.

+0

저는 피라미드 (및 프레임 워크)에 대한 새로운 답변을 제공하기 위해 노력하고 있습니다. 스레드간에 공유되는 것이 있으면 결코 변경하지 않아도됩니다. 그렇다면 예 : 배열은 모든 스레드에 대해 동일합니다. – abroekhof

+1

여기서는 직장에서 기본적인 멀티 스레딩 원칙을 사용합니다. 읽기 전용이 아닌 경우 배열에 변경 사항을 동기화하는 잠금 메커니즘이 필요합니다. 대부분의 WSGI 서버는 요청 당 하나의 스레드를 사용하지만 일부는 여분의 프로세스 (어레이가 공유되지 않음)를 사용할 수 있습니다. 따라서 읽기 전용이 아닌 경우 진행 상황을 알아야합니다. –

2

코드의 명확한 위치에 코드를로드해야합니다 (보기에서 볼 수 있겠습니까?) 성능 문제가 있는지 확인하십시오. 실제 숫자로 작업하는 것이 무엇이 문제인지 추측하려고 시도하는 것보다 낫습니다. 당신은 보통 현실에 놀랄 것입니다.

성능 문제가 발생하는 경우 여러 스레드마다 복사본이 필요 없다고 가정하고 가져온 후에 전역 범위에서로드 해보십시오. 그래도 작동하지 않으면 자체 모듈로 옮겨서 가져 와서 가져 오십시오. 그래도 여전히 도움이되지 않는다면 ... 나는 그 때 무엇을 알지 못한다.

+0

3500x3500 수레 배열 (64 비트)은 약 100MB 크기입니다. 하나는 (모든 요청에 ​​대해)보기 기능에서 디스크에서로드하는 것이 초고속이 될 수 없다고 추측 할 수 있습니다 ... – Sergey

관련 문제