일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- CD
- QuerySet
- Transaction
- DRF
- apitestcase
- 백준
- nestedfunction
- annotate
- Python
- DjangoRestFramework
- F객체
- racecondition
- 코루틴
- 도커
- Prefetch_related
- Continuous Deployment
- Git
- docker
- Continuous Delivery
- CI
- testcase
- EC2
- django
- dry-yasg
- Coroutine
- to_attr
- DjangoCache
- aws
- database
- aggregate
- Today
- Total
목록Python (11)
BackEnd King KY

현재 회사에서 Django -> FastAPI로 전환을 목표로 천천히 작업하고 있습니다. 저 역시 일부 기능을 FastAPI로 구현했는데, 비동기 프로그래밍이 매우 어려웠습니다. 그래서 이번엔 제가 배운 파이썬 비동기 프로그래밍에 대해 작성해보겠습니다. 티스토리로 보기 불편하실 경우, Github에서 보실 수 있습니다. 동기/비동기 우선, 동기/비동기에 대해 알아보겠습니다. 인터프리터 언어로 한 줄씩 읽으며 내려오는 파이썬 특성상 멀티 쓰레드가 되지 않습니다. 그래서 하나의 쓰레드에서 동시 처리를 할 수 있는 비동기 프로그래밍의 중요성이 커졌습니다. 그러면 동기와 비동기가 뭘까라고 생각하시는 분들이 있을텐데 가장 많이 드는 예시인 커피집 주문을 이야기 해보겠습니다. 동기는 커피 주문 후 커피가 나올 때까..

티스토리로 보기 불편하신 경우, Github에서 보실 수 있습니다. 문자열 검색 코루틴 만들기 다음 소스 코드를 완성하여 문자열에서 특정 단어가 있으면 True, 없으면 False가 출력되게 만드세요. f = find('Python') next(f) print(f.send('Hello, Python!')) print(f.send('Hello, world!')) print(f.send('Python Script')) f.close() ... True False True 우선, find()는 문자열을 받으므로 def find(word: str) 이렇게 시작합니다. 그리고 send()를 통해 문장을 보내므로 def find(word: str): resu..

티스토리로 보기 불편하실 경우, Github에서 보실 수 있습니다. yield from으로 값을 여러 번 바깥으로 전달하기 일반적으로 yield를 통해 값을 하나씩 전달했습니다. 대표적으로 __next__() 메소드를 이용하기도 했습니다. 예시 함수 하나 보겠습니다. def number_generator(): x = [1,2,3] for i in x: yield i for i in number_generator(): print(i) 이렇게 했을 때 1 2 3 이렇게 값이 출력 됩니다. 이러한 경우, 매번 반복문을 사용하지 않고 yield from을 사용하면 됩니다. yield from에는 반복 가능한 객체, 이터레이터, 제너레이터 객체를 지정합니다.(Python 3.3부터 사용 가능) 그러면 예시 하나 ..

혼자해보는 코루틴 작동 순서 이 부분은 파이썬 코딩도장엔 없고, 혼자 궁금해서 해보고 작성하게 되었습니다. 만약 여러 개의 yield가 들어가면 끊어져서 나올텐데 실제로는 어떻게 나올까? 하는 궁금증이 생겨서 직접 해봤습니다. 티스토리로 보기 불편하신 경우, Github에서 보실 수 있습니다. def sum_coroutine(): try: total = 0 while True: print("*"*10, "Not yield") x = (yield) print("*"*10, "X yield", x) total += x yield total print("*"*10, "total yield", total) except RuntimeError as e: yield total 위와 같이 계속 send()를 통해 값..

티스토리가 보기 불편하시면 Github에서 보실 수 있습니다. 보통 코루틴은 실행 상태 유지를 위해 while True를 사용합니다. 만약 코루틴을 종료하고 싶으면 close 메소드를 사용합니다. 코루틴에 숫자 20개를 보낸 후 종료해보겠습니다. def number_coroutine(): while True: x = (yield) print(x, end=' ') co = number_coroutine() next(co) for i in range(20): co.send(i) co.close() # 코루틴 종료 이렇게 하면 0~19까지 출력되고 종료됩니다. 만약 close()가 없다면 co.send() 를 계속 보낼 수 있으며, 종료 후 send()를 했을 떄 파이썬 스크립트가 끝나면 코루틴..

티스토리로 보기 불편하시면 Github에서 보실 수 있습니다 이전에 코루틴 안에서 값을 보냈는데, 밖으로 값을 전달해보겠습니다. 로직을 먼저 간단하게 이야기하면, yield 형식으로 yield에 변수를 지정한 뒤, 괄호를 묶어주면 바깥으로 값을 전달합니다. 그리고 yield를 사용하여 바깥으로 전달한 값은 next 함수와 send 메서드의 반환값으로 나옵니다. def sum_coroutine(): total = 0 while True: x = (yield total) # 코루틴 바깥에서 값을 받아오면서 바깥으로 값을 전달 total += x co = sum_coroutine() print(next(co)) # 0: 코루틴 안의 yield까지 코드를 실행하고 코루틴에서 나온 값 출력 print(co.sen..
코루틴(Coroutines) 회사에서 FastAPI 도입을 앞두고 있어, 코루틴을 시작으로 비동기 프로그래밍에 대해 공부하려고 합니다. 모든 출처는 파이썬 코딩도장 코루틴(Coroutine) 입니다. 티스토리로 보기 불편하시면 Github에서 보실 수 있습니다. Coroutine 우선, 코루틴을 설명하기에 앞서 이해를 돕기 위한 함수 하나를 만들어보겠습니다. def add(a, b): c = a + b # add 함수가 끝나면 변수와 계산식은 사라짐 print(c) print('add 함수') def calc(): add(1, 2) # add 함수가 끝나면 다시 calc 함수로 돌아옴 print('calc 함수') calc() calc() 함수를 실행하면 add(1,2)함수가..

CSV Celery에 이어서 추가 내용인데, 수집한 데이터를 CSV 파일로 만든 뒤 S3에 저장하고 있습니다. 그 다음 데이터베이스에 저장하는 과정을 통해 앱 이용자들에게 정보를 제공합니다. 나이스 오픈 API에서 경기도 내에 있는 외국어 고등학교에 존재하는 학과 리스트들을 csv 파일로 만드는 과정에 대해 포스팅 해보겠습니다. 사전 준비 우선, csv파일을 생각해보면 가장 첫 줄에는 컬럼명이 들어가 있습니다. 그러면, 그 컬럼들에 대한 정의가 필요합니다. 오픈API 홈페이지에 가면 출력 컬럼들이 나오게 됩니다. 이 해당 컬럼을 우선 정의해줍니다. MAJOR_INFO = { "ATPT_OFCDC_SC_CODE" : "시도교육청코드", "ATPT_OFCDC_SC_NM" : "시도교육청명", "SD_SCHU..