2012-02-26 3 views
1

많은 시간을 소비하는 프로그램을 실행하고 있습니다. 나는 504 프로세서를 요구할 수있는 클러스터에 액세스 할 수있는 기회를 가지지 만, 고객 서비스는 느리게 말하며, 그래서 나는 당신에게로 향한다. 나는 다음과 같이 매우 간단한 응용 프로그램을 사용하고 있습니다 : 내가 프로세스가 시작 볼 수 있지만,파이썬 다중 프로세싱의 한계.

import multiprocessing 

def function(data): 
    data = complicated_function_I_was_given(data) 
    with open('unique_id', 'w') as f: 
     f.write(data) 

pool = multiprocessing.Pool(504) 
pool.map(function, data_iterator) 

이제합니다 (이 'complicated_function_I_was_given'스크랩의 무리를 기록하지만, 고유 한 이름은 내가 확신 어떠한 충돌 없음) 프로세스가 정말 느린 것 같습니다. 어떤 사람들은 며칠이 걸리지 만, 1 일 후에 아무 것도 나오지 않았는데도 의 data_iterator이 즉시 처리되기를 기대하고 있습니다. 멀티 프로세싱이 가능합니까? Pool()에 한계가 있습니까? 또는 다른 노드를 통해 프로세스를 배포하지 않는다는 것을 알 수 있습니다 (각 노드에는 12 코어가 있습니다). 그리고 저는 python2.6.5를 사용하고 있습니다.

답변

3

또는 다른 노드를 통해 프로세스를 배포하지 않는다는 것입니다 (각 노드에 12 개의 코어가 있음을 알고 있습니다)? 그리고 저는 python2.6.5를 사용하고 있습니다.

저는 이것이 당신의 문제라고 생각합니다. 클러스터 아키텍처가 매우 특별하고 모든 프로세서가 동일한 논리 컴퓨터에있는 것처럼 보이지 않는 한 멀티 프로세싱은 로컬 코어에만 액세스 할 수 있습니다. 다른 병렬화 라이브러리를 사용해야 할 수도 있습니다.

answers to this question도 참조하십시오.

+0

링크를 제공해 주셔서 감사합니다. 귀하가 옳다고 생각합니다. 어떻게 그 질문을 놓칠 수 있었는지 나는 모른다. 이제는 mpi4py보다 더 많이 플레이하십시오. – Zenon

1

파이썬의 다수 인 parallel libraries 중 하나를 사용하여 작업을 확장 해 볼 수도 있습니다. 멀티 프로세싱만으로 많은 프로세서에서 작업을 스케일링하는 것에 대해 들어 본 적이 없습니다.