다중 스레딩이 Python에서 작동하는지 여부에 대해 약간 혼란 스럽습니다.
나는 이것에 대해 많은 질문이 있었고 많은 것을 읽었지만 여전히 혼란 스럽습니다. 나는 내 경험을 통해 알고 있으며 다른 사람들이 여기에 StackOverflow에 자신의 답변과 예제를 게시하는 것을 보았습니다. 그렇다면 모든 사람들이 Python이 GIL에 의해 잠겨 있고 한 번에 하나의 스레드 만 실행할 수 있다고 계속 말하는 이유는 무엇입니까? 분명히 작동합니다. 아니면 내가 여기서 얻지 못하는 차이점이 있습니까?
많은 포스터 / 응답자들은 스레딩이 다중 코어를 사용하지 않기 때문에 제한적이라고 계속 언급합니다. 그러나 동시에 작업을 수행하므로 결합 된 워크로드가 더 빨리 완료되기 때문에 여전히 유용하다고 말할 수 있습니다. 왜 그렇지 않으면 파이썬 스레드 모듈이 있을까요?
최신 정보:
지금까지 모든 답변에 감사드립니다. 내가 이해하는 방식은 멀티 스레딩이 일부 IO 작업에 대해서만 병렬로 실행되지만 CPU 바운드 다중 코어 작업에 대해서는 한 번에 하나씩 만 실행할 수 있다는 것입니다.
이것이 실제적인 측면에서 나에게 어떤 의미인지 완전히 확신 할 수 없으므로 멀티 스레드를 수행하려는 작업의 종류에 대한 예를 들겠습니다. 예를 들어, 매우 긴 문자열 목록을 반복하고 각 목록 항목에 대해 몇 가지 기본 문자열 작업을 수행하고 싶다고 가정 해 보겠습니다. 목록을 분할하고 새 스레드의 루프 / 문자열 코드로 처리 할 각 하위 목록을 보내고 결과를 다시 대기열로 보내면 이러한 워크로드가 대략 동시에 실행됩니까? 가장 중요한 것은 이것이 이론적으로 스크립트를 실행하는 데 걸리는 시간을 단축한다는 것입니다.
또 다른 예는 4 개의 다른 스레드에서 PIL을 사용하여 4 개의 다른 그림을 렌더링하고 저장할 수 있고 그림을 하나씩 처리하는 것보다 더 빠를 수 있습니다. 이 속도 요소는 올바른 용어가 무엇인지 라기보다는 제가 정말로 궁금해하는 것 같습니다.
멀티 프로세싱 모듈에 대해서도 알고 있지만 지금은 중소 규모의 작업로드 (10-30 초)에 주된 관심이 있으므로 하위 프로세스를 시작하는 데 속도가 느릴 수 있으므로 멀티 스레딩이 더 적절할 것이라고 생각합니다.