2014-11-12 2 views
1

데이터웨어 하우스에서 상당히 큰 테이블을 가져 오는 파이썬 생성기가 있습니다. 데이터를 가져온 후 분산 된 방식으로 셀러리를 사용하여 데이터를 처리하고 있습니다. 테스트 후 생성기가 병목임을 알았습니다. 셀러리 작업자가 작업하기에 충분한 작업을 생성 할 수 없습니다. 이것은 내가 파이썬 생성기를 최적화하기로 결정했을 때입니다. 발전기다중 처리 모듈을 사용하여 병렬로 파이썬 생성기에 액세스

발전기는 청크 쿼리와 이러한 쿼리 결과를 데이터웨어 하우스 안타에

자세한 내용은 서로 무의 기본적으로 독립적입니다. 그래서이 모듈을 multiprocessing 모듈을 사용하여 병렬로 만들 수있는 좋은 방법이라고 생각했습니다. 많은 발전기를 사용하지 않고 발전기를 병렬 처리하는 방법을 살펴 보았습니다.

파이썬 생성기가 상태 비 저장 덩어리를 생성하는 경우 이는 멀티 프로세싱에 적합한 후보가 될 수 있습니까? 파이썬 생성기를 병렬 처리하는 방법이 있습니까? 또한 거기에 파이썬 생성기에서 병렬 처리를 사용하여 알고 있어야합니다 어떤 부작용이 있습니까?

답변

6

난 당신이 추상화의 잘못된 수준 에서이 문제를 해결하려고 할 수 있습니다 생각합니다. 파이썬 생성기는 본질적으로 상태 저장 (stateful)이기 때문에 어떤 유형의 동기화없이 프로세스간에 생성기를 분리 할 수 ​​없으며 이는 병렬 처리를 통해 얻을 수있는 성능 향상을 없앨 것입니다. 대신 각 프로세스에 대해 별도의 생성기를 생성하고 서로 오프셋을 시작하도록하는 것이 좋습니다.

예를 들어 4 개의 프로세스가있는 경우 기본적으로 첫 번째 프로세스에서 첫 번째 청크를 처리 한 다음 5 번째 청크를 처리 한 다음 9 번째 청크를 처리하고 N을 추가하면 N은 사용자가 소유 한 프로세스의 수입니다 설정. 이를 위해서는 시작할 때 각 프로세스에 고유 색인을 전달해야합니다.

관련 문제