05의 개발 계발

[TIL] 230419 coroutine & asyncio | pipenv & poetry 본문

TIL

[TIL] 230419 coroutine & asyncio | pipenv & poetry

생각하는 코댕이 2023. 4. 20. 02:00
728x90

TIL 학습목표

  • coroutine & asyncio 의 개념과 관계를 안다.
  • python에서 asyncio 를 사용할 수 있다.
  • requirements.txt 의 한계와 의존성관리에 대해 이해한다.
  • pipenv & poetry 를 사용해 패키지관리를 할 수 있다.

1) coroutine & asyncio

코루틴 Coroutine 

서브루틴 / 코루틴

┌ Sub + routine : 종속적인 루틴(보조 루틴) [함수]
└ Co + routine : 협력적으로 실행되는 루틴

메인 루틴에 종속적인 서브 루틴
함수는 서브루틴에 해당한다.


동기 비동기

┌동기처리 : 순차 처리 방식
└비동기 처리 : 여러 작업 동시에 처리

비동기 프로그래밍
코루틴은 실행 중 데이터를 서로 반환하는 과정을 겪는다.

파이썬 코루틴 Coroutine

실행 중인 함수를 잠시 중단 하고 나중에 실행을 재생하는 기능

yield  |  coroutine  실행중 yield 를 만날 때마다 함수 일시 중단(후 값이 들어온다면 값을 반환 ≒ return)   
next(#)  |  다음 yield 를 만날 때까지 coroutine 재개(아래의 경우 무한루프 도는 중)
.send(#)  |  coroutine 에 값 전달하기 → coroutine 다시 실행 → yield = # 
def my_coroutine():
	while True:
    	value = yield
        print('Received value:', value)

# 코루틴 객체 생성
co = my_coroutine()

# 코루틴 실행 준비
next(co)

# 값을 보내기
co.send('안녕, 반가워!')
def my_generator():
    yield 1
    yield 2
    yield 3

gen = my_generator()
print(next(gen)) # 1	# 직전 yield 이후부터 실행 재개,
print(next(gen)) # 2	# 다음 yield 만나기 전까지 실행
print(next(gen)) # 3

asyncio

=비동기 프로그래밍을 위한 라이브러리: 코루틴 이용

await asyncio

.run() : 코루틴시작
await : 값을 받아와야하는 상황에서 대기시키기

추가학습1 추가학습2


2) requirements.txt 의 한계와 의존성관리

Module - a file containing Python definitions and statements. 

Package -a way of structuring Python’s module namespace by using “dotted module names”.

Library - collection of modules

 

pip( = python package management)

python package installation

pip install SomePackage	#설치
pip search SomePackage	#검색
pip install SomePackage==1.0.4	#특정 버전 지정 설치
pip uninstall SomePackage	#삭제
pip freeze	# 현재 설치된 패키지와 버전 목록 조회


외부라이브러리관리(의존성관리)

┌어떤 버전/어떤 패키지가 쓰였는가
└어떤 버전/어떤 패키지가 쓰일 수 있나

ex) 장고의 의존성 패키지 = 장고설치시 같이 설치되는 패키지들

의존성을 관리하지 않는다면, 라이브러리로 인한 에러를 디버깅할 수 없다.

 


requirements.txt 한계

pip freeze > requirements.txt	# 사용하는 패키지 기록
pip install -r requirements.txt	# 사용하는 패키지 설치

한계-1 이원화되지 않은 개발용, 배포용 패키지
배포용 ⊂ 개발용
개발중 test용도로 설치한 패키지들 중 배포에 꼭 필요한 패키지가 무엇인지 파악하기 힘들다

한계-2 의존관계 파악의 어려움
한 파일 내에서 구분없이 리스트화되어 저장되어, 의존성 패키지의 관계를 파악할 수 없다.

(=패키지 트래킹이 어렵다.)
의존관계 파악이 안되니 uninstall을 해도 의존성패키지는 함께 삭제되지 않는다.

한계-3 설치시 발생하는 문제
가상환경에서 pip install -r requirements.txt??
-파이썬은 가상환경이 많다
-IDE가 바뀌면 새로적용해야한다.

그래서 이를 보완하여 나온 것이  pipenv & poetry !

3) pipenv & poetry


▶ pipenv : basic usage

  • 똑같은 패키지 설치되도록 항상 보장, 스냅샷 생성
  • 의존성 관리 Pipfile Pipfile.lock (→ VCS)
  • (pyenv) Python 버전 전환 용이
  • 개발용 패키지설치 pipenv install --dev 
    배포용 패키지설치 pipenv install
     
  • 장점
    +패키지 설치/가상환경/의존성 관리 한번에!
    +의존성 그래프 지원
    +패키지 버전별 관리 편리
    +개발용,배포용 패키지 나누어 관리 가능
  • 단점
    - masOS에서 성능 저하 문제가 있어서
    - release 지연문제


단점이 발견된 pipenv.. 그래서 요즘 대세는! poetry 

▶ poetry : basic usage

  • poetry search  조회기능
  • poetry show 현재
  • poetry show --tree 의존성 조회
  • 개발용 패키지설치 poetry add --dev 
    배포용 패키지설치 poetry add 
  • 장점
    +패키지 설치/가상환경/의존성 관리 한번에!
    +의존성 그래프 지원
    +패키지 버전별 관리 편리
    +개발용,배포용 패키지 나누어 관리 가능
    +Publish 기능
    +패키지 검색 기능

 

 


4) 알게 된 점  (Learnd)

asyncio 와 poetry 를 알게 되었다. 다음 프로젝트 때 활용해보도록 하자! 

728x90