프로그래밍 언어/Python

    Python은 GIL(Global Interpreter Lock)에 의해 원칙적으로는 하나의 인터프리터가 어떤 시점에 하나의 스레드에서만 실행될 수 있다. 다만 우회 아닌 우회(?)를 이용해 멀티쓰레딩을 모방하여 사용할 수 있다. 여러 개의 스레드를 한번에 실행하는 게 아니라 여러 스레드를 그때 그 시점마다 옮겨 다니며(context-switching) 실행하는 것인데, 자세한 설명은 생략한다. 아래 그림을 참고하자. 기본 CPython 구현체를 사용하며 Python에서 병렬 작업을 수행하는 방법으로는 크게 3가지가 있다. (다른 Python 인터프리터 구현체를 사용하는 방법도 있으나 그건 서술하지 않는다.) asyncio 이용 (Python 3.7 이후부터 await, async 키워드와 asyncio..

    ThreadPool을 이용한 병렬 다운로드 예시By MilkClouds

    Python은 GIL(Global Interpreter Lock)에 의해 원칙적으로는 하나의 인터프리터가 어떤 시점에 하나의 스레드에서만 실행될 수 있다. 다만 우회 아닌 우회(?)를 이용해 멀티쓰레딩을 모방하여 사용할 수 있다. 여러 개의 스레드를 한번에 실행하는 게 아니라 여러 스레드를 그때 그 시점마다 옮겨 다니며(context-switching) 실행하는 것인데, 자세한 설명은 생략한다. 아래 그림을 참고하자. 기본 CPython 구현체를 사용하며 Python에서 병렬 작업을 수행하는 방법으로는 크게 3가지가 있다. (다른 Python 인터프리터 구현체를 사용하는 방법도 있으나 그건 서술하지 않는다.) asyncio 이용 (Python 3.7 이후부터 await, async 키워드와 asyncio..

    [Pyside6] stdout, stderr TextBrowser에 출력되게 하기By MilkClouds

    멀티스레딩이 필요 없는 경우 stdout, stderr을 TextBrowser로 중계하고 싶으나 QThread를 사용하지 않는 경우(메인 스레드만 사용하는 경우) 아래와 같이 간단하게 stdout, stderr을 redirect할 수 있다. class TextEditDemo(QWidget): def __init__(self): # TextBrowser 선언 등 잡다한 설정(생략) sys.stdout.write = self._append_text sys.stderr.write = lambda x: self._append_text(x, color='red') def _append_text(self, text, color=None): if color: self.textBrowser.append(f'{text}..