2011-10-06 5 views
4

시작 및 종료 날짜가 & 인 함수 (예 : myFunc)가 반복되어이 기간 동안 데이터를 처리하는 일부 사전에 액세스합니다. 스레드를 사용하여이 코드를 병렬 처리하려고합니다.동일한 사전에 액세스하는 다른 스레드 (읽기 전용)

내 main() 함수는 수많은 파일에서 데이터를 읽어 들여 & 사전에 저장합니다. myFunc를 호출 할 때마다 사전과 & 시작 날짜를 전달합니다. myFunc를 여러 스레드를 사용하여 호출하고 동일한 사전을 전달할 때 충돌이 발생합니까? 이러한 사전은 읽기 전용으로 만 사용됩니다.

myFunc는 많은 사전을 만들어 다른 파일에 씁니다. 이 출력 파일은 모든 스레드마다 다를 수 있지만 모든 스레드에서 사전의 이름이 같으므로 충돌이 발생합니까? 이론적으로, 나는 스레딩의 개념은 그 사전이 전역 적이 지 않는 한 충돌이 있어서는 안된다는 것을 이해한다. 그러나 스레딩에 대한 나의 첫 번째 시도 이후, 약간의 확인을 원할 것입니다. 스레딩을 사용

감사

답변

6

은, 아니, 당신은 문제가 않을 것입니다. 당신은 또한 병렬 처리를 달성하지 않을 것입니다. 파이썬의 GIL (Global Interpreter Lock)은 단일 스레드가 언제든지 처리 할 수있게합니다. 진정한 병렬 처리를 원하면 다중 처리 모듈을 살펴 봐야합니다. 그것은 실제로 기계에서 여러 프로세서를 활용할 수있는 능력이 있습니다.

+0

나는 그것을 깨닫지 못했습니다. 감사. 다중 처리 모듈을 사용하는 경우 두 질문 모두에서 대답이 No가됩니까? – user669815

+1

정확히 그가 말한 것. 질문에 직접 답하려면 _no_, 충돌이 없어야합니다. 귀하의 질문에 더 잘 대답하기 위해 스레드를 사용하여 파이썬에서 병렬 처리를 수행 할 수 없습니다. [다중 처리] (http://docs.python.org/library/multiprocessing.html)를 사용해야합니다. –

+0

@ user669815 - 답변은 두 질문에 모두 적용되지 않습니다. 당신의 접근 방식은 정확합니다. 단지 쓰레드를 사용할 수 없습니다. –