Python 11

[python] 파이썬 동시성 프로그래밍

동시성 프로그래밍에 대해서 알기 위해서는 Bound, Thread, Process, Sync, Async라는 개념들을 알고 넘어갈 필요가 있습니다. Bound부터 하나씩 알아보도록 하겠습니다. Bound 동시성 프로그래밍에 대해서 공부하려면 먼저 Bound라는 개념을 알고 갈 필요가 있는데, Bound는 묶인단 뜻으로 작업을 하면서 묶이게 되는 시간을 뜻 합니다. Bound는 CPU Bound와 I/O Bound 2가지로 나뉩니다. CPU Bound CPU를 활용하는 작업에 따라 기다리게 되는 구간을 뜻 합니다. ex) 수학 연산, 딥러닝 연산, 이미지 처리 등 I/O Bound I/O 작업에 대해서 기다리는 구간을 뜻 합니다. ex) 파일 입출력, 네트워크 요청 등 Thread vs Process Th..

python 2024.03.31

[Python] contextvars

fastapi가 등장한 이후로, python에서도 비동기로 구현하는 방식이 많이 활성화되고 있습니다. 멀티 스레딩으로 구현할 때는, thread의 context를 활용해서 로그를 남겨서 쉽게 모니터링 할 수 있었는데 비동기에서는 thread context가 없어서 해당 부분을 해소하기 위해서 등장한 것이 contextvars입니다. contextvars는 파이썬 표준 라이브러리로 따로 설치를 해야하는 것은 없습니다. 사용법은 매우 간단합니다. ContextVar를 한 번 선언을 하고, set 함수를 호출하여 context를 설정해주면 get 함수를 호출해서 가져다 쓸 수 있습니다. 바로 예시 코드를 보겠습니다. import asyncio import contextvars import random impo..

python 2024.01.07

SQLAlchemy 소개 및 활용법

딥러닝 모델을 서비스에 적용하다보면, 실시간 서빙 뿐만 아니라 데이터베이스를 활용하여 데이터베이스에 딥러닝 모델의 인퍼런스 결과를 저장해두고 저장된 결과를 활용하여 서비스를 제공하기도 합니다. 자연어처리에서 예를 들면, 미국 신문 기사에 대한 번역 서비스를 제공한다고 할 때, 미국 신문 기사를 데이터베이스에 저장하면서 번역 결과도 같이 저장을 해둔다면 유저가 접속할 때 마다 번역할 필요가 없겠죠? 그래서 딥러닝 모델을 서비스에 제공하다보면, 데이터베이스에 대한 지식도 필요하게 됩니다. SQLAlchemy? SQLAlchemy는 그 자체가 데이터베이스 클라이언트는 아닙니다. 데이터베이스 클라이언트 라이브러리는 별도로 활용하고, 오늘 소개드릴 SQLAlchemy는 ORM(Object Relational Ma..

python/SQLAlchemy 2022.08.21

[ML OPS] 파이썬으로 딥러닝 모델 서빙하기 (ft. flask)

딥러닝 모델을 서빙하는 방식은 여러가지 방법이 있습니다. 여러가지 방법 중에서, 오늘은 flask를 활용하는 방법을 소개해보도록 하겠습니다. https://github.com/hsh2438/MLops/tree/main/1_flask_rest_api GitHub - hsh2438/MLops Contribute to hsh2438/MLops development by creating an account on GitHub. github.com 코드는 우선 위의 깃헙 레포지토리를 참고하시면 됩니다. 라이브러리 설치 필요한 라이브러리는 requirements.txt 파일에 저장해두었으므로 아래 명령을 실행하여 라이브러리를 설치해주시면 됩니다. pip install -r requirements.txt 서버 구현 f..

[PYTHON] gmail로 메일 보내기

python에서 gmail을 연결해서 메일을 보내는 코드를 한번 작성해보겠습니다. 메일은 SMTP를 활용하는데, SMTP는 Simple Mail Transfer Protocol의 약자로서 메일을 보내는데 사용되는 프로토콜입니다. python에서 gmail로 메일을 보내기 전에, gmail 설정에서 변경해주어야 하는 것이 있습니다. 아래 이미지와 같이 IMAP 액세스를 설정해주시면 됩니다. python에서는 smtplib을 제공하여 별도의 라이브러리를 설치하지 않고도 STMP를 사용할 수 있습니다. 코드로 바로 보여드리면, 아래와 같이 사용할 수 있습니다. import smtplib from email.mime.text import MIMEText smtp = smtplib.SMTP('smtp.gmail...

python 2021.08.06

[Python] numpy와 랜덤함수

개요 딥러닝을 하다보면, 벡터 연산을 하는 코드를 많이 짜게 됩니다. 딥러닝을 배워서 파이썬으로 개발을 처음 하시는 분들을 보면 종종 파이썬의 기본적인 라이브러리만 활용하여 코드를 짜시는 걸 종종 보았는데요. 결론부터 말씀드리면, 그 경우 너무 느립니다. 파이썬 언어 자체가 속도가 매우 느리기 때문에, 파이썬에서는 C언어를 쉽게 연결하여 사용할 수 있는 방법이 많이 있습니다. 정말 커스텀하게 코드를 짠다면 Cython이라는 것을 사용할 수도 있고, 이미 C언어로 동작하는 라이브러리도 많이 존재합니다. 그 중에서 소개 드릴 것은 Numpy인데요. 아마 파이썬을 조금 써보신 분들은 Numpy를 많이 들어보셨을건데, 왜 써야하는 지 잘 모르시는 분들도 많으실 것 같아요. Numpy를 써야하는 이유는 연산 속도..

python 2021.04.18

[Python] 딕셔너리, Dictionary에서 key를 통해 value를 가져오는 방법

파이썬의 딕셔너리(dictionary)는 key와 value를 쌍으로 가지는 자료형입니다. key를 활용하여 value를 가져올 수 있는 방법이 있는데 그 방법들을 한번 소개해보려 합니다. 1. key를 활용하여 dict[key]로 접근 가장 쉽게 접하는 방식입니다. key를 통해 직접 접근하는 방식입니다. 이 방식의 단점은 존재하지 않는 key에 대해서는 KeyError 에러를 발생시킨다는 것입니다. 예를 들면 이런 식입니다. 2. get 함수 활용 get(key, default=None) 함수는 위와 같은 경우의 단점을 보완합니다. get 함수를 활용하면 key가 존재하지 않는 경우에 대해서 에러를 발생시키지 않고, None 혹은 지정한 default 값을 반환합니다. 아래의 이미지와 같이 활용할 수..

python 2020.08.18

[Python] join 함수, filter 함수

python에서 join 함수는 문자열을 다룰 때 정말 많이 활용하는 함수 중에 하나입니다. python은 join을 활용하면, 아래와 같이 string list를 쉽게 합칠 수 있습니다. strings = ['abc', 'def', 'ghi'] ''.join(strings) # >> abcdefghi join으로 합칠 때, 원하는 문자열을 사이마다 넣어줄 수도 있습니다. strings = ['abc', 'def', 'ghi'] '1'.join(strings) # >> abc1def1ghi 간혹, 문자열 리스트에 빈 문자열이 있는 경우도 있습니다. 그 경우에는 위와 같이 join을 하면 1이 2번 사이에 들어가게 됩니다. 그럴 때는, 아래와 같이 filter 함수를 사용하면 빈 문자열을 제거해줄 수 있습..

python 2020.08.10

[Python] python 예외처리 try, except, else, finally

실제 서비스를 개발하다보면, 예외처리가 점점 중요해집니다. 서비스가 갑자기 죽어서도 안되고, 에러에 대해서 잘 기록해둬서 버그를 수정해야하니까요. 그래서 이번엔 Python에서의 예외처리를 어떻게 하는지 한번 공부해보았습니다. 1. Python 예외처리 Python에서는 try, except, else, finally라는 4개의 구문이 있고, 이 4가지를 활용하여 예외처리를 수행합니다. 우선 4개의 구문에 대해서 간단하게 알아보겠습니다. - try 절에서는 기본적으로 실행할 소스코드를 작성합니다. - except는 try에서 실행한 소스코드에서 에러가 났을 경우에 실행되는 코드를 작성합니다. - else 절은 try 절에서 실행한 코드가 에러 없이 정상적으로 동작한 경우에 실행될 코드를 작성합니다. - ..

python 2020.06.20

[Python] dict 정렬하기

python에선 dict는 제일 많이 쓰는 데이터구조 중 하나죠. dict는 dictionary의 줄임말이며, key-value 구조로 데이터를 저장해줍니다. dict를 정렬하기 위해서는 sorted() 함수를 사용할 수 있습니다. sorted(dict.items()) 이렇게 사용하시면 dict가 정렬이 되며, 이 때 정렬은 key를 기준으로 정렬하게 됩니다. item을 기준으로 정렬하고 싶다면, 아래와 같이 하시면 됩니다. sorted(dict.items(), key=lambda x:x[1]) 그리고, 만약 역순으로 정렬을 하고 싶다면, reverse=True 옵션을 넣어주시면 됩니다. sorted(dict.items(), reverse=True) sorted(dict.items(), key=lambd..

python 2020.05.27