일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Network
- AWS
- guru
- fluent python
- BlockChain
- 러스트
- 파이썬
- Python
- IMAGE
- 전문가를 위한 파이썬
- Kubernetes
- Thread
- Container
- function
- docker
- Fast API
- 백준
- 플랫폼
- 블록체인
- Ethereum
- 코어 이더리움 프로그래밍
- 알고리즘
- dockerfile
- 동시성
- Refactoring
- RabbitMQ
- 이더리움
- BAEKJOON
- rust
- Algorithm
- Today
- Total
글쓰기 | 방명록 | 관리 |
목록Python (17)
Victoree's Blog
7.1 Future Future은 비동기 작업의 실행 객체이다. future 객체는 concurrent.futures 라이브러리나 asyncio에서 future 객체를 이용할 수 있다. 이 두 Future 클래스 객체는 완료되었을 수도, 아닐수도 있는 지연된 계산을 표현하기 위해 사용된다. Future는 앞으로 일어날 일을 나타내고, 이 실행을 스케줄링하는 프레임워크만이 어떤 일이 일어날지 확실히 알 수 있기 때문에 동시성 프레임워크에서만 배타적으로 생성해야한다. 또한 Client에서 Future의 상태를 변경하면 안된다. 실행 여부를 체크하려면 done() 메소드를 호출함으로 알 수 있고, 일반적으로 클라이언트는 Future가 완료되었는지 물어보는게 아니라 callback으로 통지해주는 것을 요청한다...
Django나 FastAPI를 사용할 때, 슬며시 지나갔던 개념들 중에 WSGI와 ASGI에 대해 간단히 정리해보자. 1. WSGI WSGI는 web server gateway interface로 파이썬 스크립트가 웹서버와 통신하기 위해 만들어진 인터페이스로 CGI의 일종이다. CGI는 common gateway interface의 약자로, 서버와 어플리케이션간에 데이터를 주고받는 방식, 규율이라고 생각하면 된다. WSGI 의 예시로, gunicorn이나 uWSGI가 있는데, 이 녀석들은 Nginx나 Tomcat과 같은 웹서버의 http request를 해석(파싱)하여 어플리케이션단에 보내는 역할을 한다. 보통 uWSGI보다 gunicorn이 성능이 더 좋아서 많이 채택된다. Tomcat이나 nginx ..
코루틴을 알아가기 전에, 예에전에 대학시절에 공부했던 프로세스와 스레드와 관련한 내용을 잠시 잠깐 리뷰하고 가자. 6.1 프로세스와 스레드 Process는 실행중인 프로그램을 말하며, 최소 1개의 thread로 구성되고 thread 단위로 스케줄링된다. 프로세스는 create, ready, run(cpu나 메모리같은 자원을 받음), suspension (메모리를 뺏김) ..등등의 다양한 상태값을 가지며 process control block에 해당 정보(pid, state, program counter - 다음으로 실행할 명령어)들이 기록된다. stack, heap, text(code), data 네개의 자원을 할당받는다. 프로세스 같은 경우, 각 자원들을 독립적으로 할당받기 때문에 종료되어도 다른 프로..
사실 이 책을 읽기 시작할 때, 제어 흐름 챕터에 관심있는 부분들이 제일 많아서 기대하고 있었다. 모호했던 내 머리속에 있는 개념들을 잘 정리할 수 있는 기회가 될 것 같아서! 이 챕터부터 몇 가지의 주제들로 파이썬의 비동기 프로그래밍 관련한 내용이 다뤄지지 않을 까 싶다. 5.1 반복형과 반복자 파이썬 2.2에서 yield 가 추가되면서, 이 키워드는 제너레이터를 생성할 수 있게 해주었다. 모든 제너레이터는 반복자다. 파이썬의 collections들은 모두 반복형이며, 다음과 같은 과정으로 iter() 함수가 동작한다. 객체가 __iter__() 메소드를 구현하였는지 확인하고, 이 메서드를 호출해서 반복자를 가져온다. __iter__() 메소드가 구현되어있지 않지만, __getitem__()이 구현되어..
현업에서 근무하면서 레디스를 여러번 사용할 기회가 있었는데, 제대로 공부해볼 시간 없이 그냥 Single Thread니까! 하고 사용만 해왔다. 이것저것 Wrap Up 공부하면서 Redis에 관해 공부한 내용을 정리해본다. 1. Redis는 싱글 스레드 기반의 Key, Value 구조의 비정형 데이터를 저장하고 관리하는 비관계형 DBMS이다. 레디스는 모든 데이터를 메모리에 저장하는 인메모리 데이터베이스이며, 다양한 자료구조를 지원한다. 레디스는 영속성을 보장하기 위해 데이터를 DISK에 저장할 수 있다. 서버가 내려가더라도 DISK에 저장된 데이터를 읽어서 메모리에 로딩을 하는데, 데이터를 DISK에 저장하는 방식은 아래와 같이 두 가지 방식이 있다. RDB(Snapshotting) 방식 순간적으로 메..
1. 일급 객체와 고위 함수 파이썬에서는 함수도 일급 객체이다. 일급 객체란 다른 객체들에 일반적으로 적용가능한 연산을 제공하는 객체이다. 런타임에 생성 가능 데이터 구조체의 변수나 요소에 할당 가능 함수 인수로 전달 가능 함수 결과로 반환 가능 고위 함수란 함수를 인수로 전달하거나 함수로 결과를 반환할 수 있다. 데코레이터도 고위함수에 속한다. 대표적인 함수로 map, filter, reduce, lambda 등이 있다. map, filter, reduce 같은 함수들은 사실 제너레이터 표현식과 지능형 리스트 이후 중요도가 좀 떨어졌다. reduce는 합계용 함수로, 다른 reduction 함수로는 all(), any() 등이 있다. 이런 reduction 함수는 특정 결과를 하나의 값에 누적한다. s..
딕셔너리는 파이썬의 핵심이다. 기본적인 dict 외에 표준 라이브러리에서 defaultdict, OrderedDict, ChainMap, Counter 등의 매핑형을 제공하며 이는 모두 collections 모듈에 정의되어 있다. 매핑 API 에서는 __missing__() 메소드는 키를 찾을 수 없을 때 발생하는 일을 정의할 수 있게 해준다. 1.1 딕셔너리 조기 실패 철학에 따라, 존재하지 않는 k로 dictionary에 접근하면 dict는 오류를 발생시킨다. 만약 기본값을 설정하고 싶다면 다음과 같이 세팅할 수 있다. my_dict.setdefault(key, []).append(new_value) if key not in my_dict: my_dict[key]=[] my_dict[key].appe..
시퀀스 지능형 리스트와 제너레이터 표현식은 시퀀스를 생성하고 초기화하는 강력한 표기법이다. 튜플은 익명 필드를 가진 레코드 및 불변 리스트로 사용할 수 있다. 튜플을 레코드로 사용할 때는 튜플 언패킹이 필드에 접근하는 가장 안전하고 가독성 좋은 방법이다. sort()와 sorted() 내장 함수는 사용하기 쉬우며, 선택적인 key 인수에 정렬을 계산하는 함수를 지정할 수 있으므로 융통성도 뛰어나다. 정렬된 시퀀스의 순서를 유지하면서 항목을 추가하려면, bisect.insort() 메소드를 사용하고, 정렬된 시퀀스를 효율적으로 검색하려면 bisect.bisect() 메소드를 사용하자. 1.1 지능형 리스트와 제너레이터 표현식 시퀀스를 읽어서 개수를 세거나 어떤 항목을 골라내거나 합계를 구하는 등 for 루..
파이썬의 최고 장점 중 하나는 일관성이다. 파이썬으로 어느 정도 작업을 해본 이후에는 새로운 기능을 구현할 때에도 어느정도 예측이 가능하다. 다른 객체 지향 언어에서는 collection.len() 의 방식으로 함수를 사용하지만, 파이썬에서는 len(collection)이라고 사용하는 것이 크게 이상하지 않다. 챕터 1에서는 Pythonic(파이썬스러움)과 파이썬 데이터 모델에 대해 설명한다. 1. 아래는 collection 라이브러리를 이용해 Card 클래스를 정의한 코드이다. import collections Card = collections.namedtuple('Card', ['rank', 'suit']) 실제 업무에서 작업할때는 위 라이브러리를 거의 사용해본 적이 없는 것 같다. 알고리즘 문제 풀..
1. Middleware란 1) 미들웨어란? 미들웨어란 특정 path에 따른 모든 요청/응답을 처리하기 전에 수행할 함수이다. 앱에 오는 요청을 받고, 작업을 수행하거나 필요한 코드를 수행함 어플리케이션에는 나머지 부분에서 처리할 요청을 전달함 어플리케이션에서 생성한 응답을 가져와, 작업을 수행하거나 필요한 코드를 실행하고 응답을 반환함 미들웨어 예시 import time from fastapi import FastAPI, Request app = FastAPI() @app.middleware("http") async def add_process_time_header(request: Request, call_next): start_time = time.time() response = await call_..