문제

Python Gil의 존재는 Python Multi Threading에서 같은 작업은 단일 스레드에서 반복하는 것과는 다르지 않습니다.

예를 들어 두 파일을 업로드 해야하는 경우 파일을 업로드하는 대신 두 스레드로 수행 할 수있는 이점은 무엇입니까?

두 가지 방법으로 큰 수학 작업을 시도했습니다. 그러나 그들은 완료하는 데 거의 같은 시간이 걸리는 것 같습니다.

이것은 나에게 불분명 한 것 같습니다. 누군가 나를 도와 줄 수 있습니까?. 감사.

도움이 되었습니까?

해결책

파이썬의 실은 자격이있는 것보다 약간 더 나쁜 랩을 얻습니다. 실제로 혜택을받는 세 가지 (2.5)가 있습니다.

  • 비 파이썬 코드 (예 : C 라이브러리, 커널 등)가 실행중인 경우 다른 파이썬 스레드가 계속 실행될 수 있습니다. 한 번에 두 스레드로 실행할 수없는 순수한 파이썬 코드 일뿐입니다. 따라서 디스크 또는 네트워크 I/O를 수행하는 경우 스레드는 대부분의 시간이 파이썬 자체 외부에 소비되므로 실제로 무언가를 살 수 있습니다.

  • 길은 실제로 일부가 아닙니다 파이썬, 그것은 구현 세부 사항입니다 CPYTHON (핵심 파이썬 데브가 작동하고 Linux 상자 등에서 "Python"을 실행하면 일반적으로 얻을 수있는 "참조"구현.

    Jython, Ironpython 및 Python의 기타 상환은 일반적으로 ~ 아니다 길과 여러 개의 순수한 파이썬 스레드가 있습니다 ~할 수 있다 동시에 실행하십시오.

  • 0.5 사례 : 전적으로 순수한 파이썬이고 스레딩의 성능 이점이 거의 없거나 전혀 없더라도 일부 문제는 개발자 시간과 스레드로 해결하기 어려운 측면에서 편리합니다. 이것은 물론 개발자에 따라 다릅니다.

다른 팁

실제로 사용중인 라이브러리에 따라 다릅니다. GIL은 파이썬 객체와 내부 데이터 구조가 동시에 변경되는 것을 방지하기위한 것입니다. 업로드를하는 경우 실제 업로드를 수행하는 데 사용하는 라이브러리는 실제 HTTP 요청이 완료되기를 기다리는 동안 GIL을 해제 할 수 있습니다 (표준 라이브러리의 HTTP 모듈의 경우는 그렇습니다. 확인하지 않았다).

참고로, 당신이 정말로 일을 병렬로 실행하고 싶다면 여러 프로세스를 사용하십시오. 그것은 당신에게 많은 문제를 절약 할 것이며 더 나은 코드 (더 강력하고 확장 가능하며 아마도 더 나은 구조화)로 끝날 것입니다.

실행중인 기본 코드 모듈에 따라 다릅니다. 기본 모듈은 길을 풀고 나가서 다른 스레드가 길을 잠글 수 있도록하는 자체 일을 할 수 있습니다. Gil은 일반적으로 Python과 Native의 코드가 Python 객체에서 작동하는 동안 보관됩니다. 자세한 내용을 원한다면 아마도 가서 그것에 대해 꽤 많이 읽어야 할 것입니다. :)

보다:글로벌 통역사 잠금 (GIL)은 무엇입니까? 그리고 스레드 상태 및 글로벌 통역사 잠금

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top