본문 바로가기
Python/Python FAQ

Python 간단한 파이썬 루프를 병렬화하는 방법은 무엇인가요?, How do I parallelize a simple Python loop?

by 베타코드 2023. 10. 27.
반응형

질문


이것은 아마도 사소한 질문일 것입니다만, 파이썬에서 아래 루프를 병렬화하는 방법은 무엇인가요?

# 출력 리스트 설정
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를 피하기 위해: 이 예제에는 스레드를 사용하는 것에 어떤 이점도 없습니다. 여기서는 문제를 피하기 위해 프로세스를 사용해야합니다.

반응형

댓글