반응형
질문
이것은 아마도 사소한 질문일 것입니다만, 파이썬에서 아래 루프를 병렬화하는 방법은 무엇인가요?
# 출력 리스트 설정
output1 = list()
output2 = list()
output3 = list()
for j in range(0, 10):
# 개별 매개변수 값 계산
parameter = j * offset
# 계산 호출
out1, out2, out3 = calc_stuff(parameter = parameter)
# 결과를 올바른 출력 리스트에 넣기
output1.append(out1)
output2.append(out2)
output3.append(out3)
파이썬에서 단일 스레드를 시작하는 방법은 알고 있지만 결과를 "수집"하는 방법을 모르겠습니다.
여러 개의 프로세스도 괜찮습니다 - 이 경우에 가장 쉬운 방법을 사용하면 됩니다. 저는 현재 리눅스를 사용하고 있지만, 이 코드는 Windows와 Mac에서도 실행되어야 합니다.
이 코드를 병렬화하는 가장 쉬운 방법은 무엇인가요?
답변
CPython에서 여러 개의 스레드를 사용하면 순수한 파이썬 코드의 성능이 향상되지 않습니다. 이는 전역 인터프리터 락 (GIL) 때문입니다. 대신 multiprocessing
모듈을 사용하는 것을 제안합니다:
pool = multiprocessing.Pool(4)
out1, out2, out3 = zip(*pool.map(calc_stuff, range(0, 10 * offset, offset)))
이는 대화형 인터프리터에서 작동하지 않습니다.
GIL에 대한 일반적인 FUD를 피하기 위해: 이 예제에는 스레드를 사용하는 것에 어떤 이점도 없습니다. 여기서는 문제를 피하기 위해 프로세스를 사용해야합니다.
반응형
댓글