Python10 GC(Garbage Collection) 1. GC(Garbage Collection) 파이썬에선 기본적으로 garbage collection(가비지 컬렉션)과 reference counting(레퍼런스 카운팅)을 통해 할당 된 메모리를 관리한다. 기본적으로 참조 횟수가 0 이된 객체를 메모리에서 해제하는 레퍼런스 카운팅 방식을 사용하지만, 참조 횟수가 0 은 아니지만 도달할 수 없는 상태인 reference cycles(순환 참조)가 발생했을 때는 가비지 컬렉션으로 그 상황을 해결한다. 엄밀히 말하면 레퍼런스 카운팅 방식을 통해 객체를 메모리에서 해제하는 행위가 가비지 컬렉션의 한 형태지만 여기서는 순환 참조가 발생했을 때 cyclic garbage collector 를 통한 가비지 컬렉션과 레퍼런스 카운팅을 통한 가비지 컬렉션을 구분했다. .. 2022. 2. 16. GIL(Global Interpreter Lock) 1. GIL 과 그로인한 성능 문제 GIL 때문에 성능 문제가 대두되는 경우는 압축, 정렬, 인코딩 등 수행시간에 CPU 의 영향이 큰 작업(CPU bound)을 멀티 스레드로 수행하도록 한 경우다. 이 땐 GIL 때문에 멀티 스레드로 작업을 수행해도 싱글 스레드일 때와 별반 차이가 나지 않는다. 이를 해결하기 위해선 멀티 스레드는 파일, 네트워크 IO 같은 IO bound 프로그램에 사용하고 멀티 프로세스를 활용해야한다. 2. GIL(Global Interpreter Lock) GIL 은 스레드에서 사용되는 Lock 을 인터프리터 레벨로 확장한 개념인데 여러 스레드가 동시에 실행되는걸 방지한다. 더 정확히 말하자면 어느 시점이든 하나의 Bytecode 만이 실행되도록 강제한다. 각 스레드는 다른 스레드.. 2022. 2. 16. Generator[파이썬/Python] 1. Generator란? Generator(제너레이터)는 제네레이터 함수가 호출될 때 반환되는 iterator(이터레이터)의 일종이다. 제너레이터 함수는 일반적인 함수와 비슷하게 생겼지만 yield 구문을 사용해 데이터를 원하는 시점에 반환하고 처리를 다시 시작할 수 있다. 일반적인 함수는 진입점이 하나라면 제너레이터는 진입점이 여러개라고 생각할 수 있다. 이러한 특성때문에 제너레이터를 사용하면 원하는 시점에 원하는 데이터를 받을 수 있게된다. 구현 코드 : generator >>> def test_generator(): ... yield 1 ... yield 2 ... yield 3 ... >>> gen = test_generator() >>> type(gen) >>> next(gen) 1 >>> n.. 2022. 2. 15. Pass와 Continue[파이썬(python)] 1. Pass와 Continue의 차이 먼저 Python에서 continue와 pass의 차이를 정리해보자. pass는 단순히 실행할 코드가 없다는 것을 의미한다. continue는 다음 순번의 loop를 돌도록 강제한다. 아래 코드를 보자. 만약 pass를 수행하게 되면 그냥 아무 작업을 수행하지 않고 넘어가 'pass'가 출력된다. continue를 수행하게 되면 바로 다음 loop로 넘어가기 때문에 'continue'가 출력되지 않는 것을 알 수 있다. arr1 = [1,2,3] for i in arr1: if i : print(i) pass print('pass') arr2 = [4,5,6] for i in arr2: if i : print(i) continue print('continue') 실.. 2022. 1. 21. 이전 1 2 3 다음