본문 바로가기
관리자

Programming-[Backend]

(421)
파이썬 중급 - 9. 동시성과 병렬성 : Futures 개요 동시성, 병렬성과 관련한 부분은 실제 코딩이 어렵다기보다는 이론적인 배경을 정확하게 아는 것이 어렵고, 중요하다. 따라서 이번 강의 내용 정리는 개요 수준이고, 앞으로 더 많은 경험과 학습을 통해서 완전한 이해가 필요하다. Futures를 이용하여 동시성 작업을 할 수 있다. 목적은 비동기 작업을 실행하여 지연 시간(Block)과 리소스 낭비를 방지하는 것이다. 보통 File, Network 등 I/O 관련 작업에서 동시성을 활용하는 것을 권장한다. 과거에는 threading, multiprocessing 등의 모듈을 import 해야했지만, 지금은 더 캡슐화되어 futures로 통합되었다. 특히 futures는 GIL(Global Interface Lock) 방식을 사용한다. 이것은 두 개 이상의..
[TIL] django, postgresql에서 json column 내부값(key값) 조회하기 anti-pattern일 수 있지만, 아래처럼 많은 양의 데이터를 우선적으로 column 하나에 json으로 넣어야할 수 있다. 이런 경우 내부 값을 조회하는 postgresql의 문법을 위 예시에 적용하면 다음과 같다. select table.data -> 'length', table.data -> 'size', ... https://popsql.com/learn-sql/postgresql/how-to-query-a-json-column-in-postgresql Django에서도 더블 언더 스코어(__) 문법으로 이를 지원한다. def get_queryset(self): return ( self. queryset .filter( table__data__length__isnull=True, )
파이썬 중급 - 8. 제너레이터 개념 되짚기, 코루틴 이해하기 코루틴 제너레이터 개념 되짚기 참조2의 예제를 참고하여 제너레이터의 caller - callee 개념을 이해하고나서 코루틴에 대해서 알아본다. callee 제너레이터를 호출하는 곳이 caller라고 보면, caller에서 next()로 callee를 호출할 때마다 아래 그림과 같은 과정이 진행된다. 여기서 유의할 점은 caller는 callee를 항상 호출하고 callee는 일방적으로 데이터를 caller에게 전달해주는 역할만 한다는 점이다. 이것이 일반적인 제너레이터의 개념이다. def callee(): yield 1 yield 2 x = callee() i = next(x) i = next(x) 코루틴 개념 위와 다르게 코루틴은 메인 루틴인 caller가 서브 루틴인 callee에게 데이터를 전달할 ..
파이썬 중급 - 7. 병행성 흐름: iter, hasattr, isinstance, stopIteration, Yield, itertools 이터레이터와 제너레이터 병행성 흐름을 이해하기 위해서 연결된 개념인 이터레이터와 제너레이터를 좀 더 깊이 이해할 필요가 있다. 이터레이터는 반복이 가능한 객체를 의미한다. 파이썬에서 기본적으로 반복이 가능한(iterable) 자료형들은 다음과 같다. collections, list, text file, Dict, Set, Tuple, unpacking, *args… __iter__의 구현방식 반복가능한 객체는 dir()로 확인 시 iter 메서드를 포함하고 있다. 다시 말해 iter() 함수를 내부적으로 호출한다는 것이다. 확인을 위해서 직접 반복 가능한 문자열 객체를 iter() 함수에 대입해보자. iter()함수를 문자열 w에 적용하고, 적용된 t 변수에서 dir(t) 의 출력 시, __next__ ..
파이썬 중급 - 6. 고위 함수(Higher Order Function), 클로저(Closure) 기본 클로저 심화 클로저 개념 제대로 알기 지난 글에서 다뤘던 클로저에 대해서 제대로 알아본다. 외부에서 호출된 함수의 변수값이나 상태를 복사 후 저장하는 것이 클로저의 개념이였다. 이렇게 값을 저장해놓고 나중에 접근할 수 있도록 한다. 함수 내부에 다른 함수를 두어 자유 변수(Free variable)을 기억하도록 만들 수 있다. 평균값을 구하는 averager를 클로저를 이용하여 작성해본다. 처음 closure_ex1을 실행했을 때는 함수 자체가 반환되는 것을 확인할 수 있다. 그리고 나서 변수값을 넣을 때마다, 클로저 영역에 있는 series에 값이 누적되면서 결과가 출력되는 것을 확인할 수 있다. # Closure 사용 def closure_ex1(): # Free variable # 클로저 영역 se..
파이썬 중급 - 5. 고위 함수(Higher Order Function), 클로저(Closure) 기본 파이썬 함수 특징 런타임 초기화 변수 할당 가능 함수 인수 전달 가능 함수 결과 반환 가능(return) 함수는 클래스가 갖는 매직메서드도 갖고 있다. 함수나 클래스에 포함된 함수 목록을 조회하는 dir 함수를 통해서 클래스 부분은 제외하고 함수 부분에만 있는 함수 목록을 확인해볼 수 있다. 강의에서는 factorial 함수를 예시로 들면서 설명한다. 다음 내용에서 배울 closure, call 등이 있는 것을 볼 수 있다. def factorial(n): '''Factorial Function n: int''' if n == 1: return 1 else: return n * factorial(n-1) class A: pass print(factorial(5)) print(factorial.__doc_..
파이썬 중급 - 4. 해시테이블(Dictionary), Set Dictionary 파이썬은 기본적으로 dict형을 제공하며, 해시 테이블 자료구조로 구현되어있기 때문에 따로 해시 테이블을 구현할 필요가 없다. 아래 명령어로 출력해보면 파이썬의 코드 자체가 dict형태로 구현된 것을 볼 수 있다. print(__builtins__.__dict__) # {'__name__': 'builtins', '__doc__': "Built-in functions, exceptions, and other objects.\\n\\nNoteworthy: None is the `nil' object; Ellipsis r..... 각 객체의 고유한 key값인 hash값은 hash() 함수로 확인할 수 있다. 다만 mutable한 자료형은 변경이 가능하므로 hash값을 확인할 수 없다. t..
파이썬 중급 - 3. 시퀀스, 제너레이터, sorted, unpacking, immutable 등 시퀀스 시퀀스 기본 https://wikidocs.net/84391 파이썬에는 3가지 시퀀스 자료형이 있다. 문자열 : 문자열(string) ‘Hello’는 문자(character)들의 시퀀스이다. 리스트 : [1, 4, 5] 튜플 : (’GOOD’, 100, 121.12) 모든 시퀀스는 순서가 유지되고, 정수로 인덱싱하며 길이가 있다. 자료형 구분 정리 컨테이너와 플랫 컨테이너(container): 서로 다른 자료형을 하나의 컬렉션에 담을 수 있는 것([list, tuple, collections.deque]) 플랫(Flat): 한 개의 자료형만 담을 수 있는 것([str, bytes, bytearray, array.array, memoryview]) 가변 vs 불변형 가변형(list, bytearra..