Python

Python/Python

[Python] 파이썬 Thread and Pool Manager

[Python] 파이썬 Thread and Pool Manager GitHub 주소 https://github.com/sanggi-wjg/py-thread-manager 코드 import os from pool_manager import PoolManager def calculate(x): print(f"[{os.getpid()}] func: {x}\t\t", r := x ** 5 ** 2, flush=True) return r manager = PoolManager() manager.add_task(calculate, [i for i in range(2, 22)]) manager.run_map() manager.add_task(calculate, [i for i in range(2, 22)]) mana..

Python/Open Source

[Python] 파이썬 출력 문자 색 변경하기

[Python] 파이썬 출력 문자 색 변경하기 (Python print with color) 파이썬 문자 혹은 데이터 출력시에 색깔과 함께 이미지처럼 출력하는 방법 GitHub 주소 https://github.com/sanggi-wjg/color_print Install pip install colorful_print Usage 1 import sys from colorful_print import color a = [1, 'a', 2.3] b = (4, 'b', 5.6) color.black('Print Black', a, b) color.red('Print Red', a, b) color.green('Print Green', a, b) color.yellow('Print Yellow', a, b) c..

Python/Open Source

[Locust] 2. Locust를 통한 언어와 프레임워크 별 테스트

테스트용 Locust 설정 locust.conf locustfile = locust_impl.py headless = true expect-workers = 5 host = http://localhost:8000 users = 10 spawn-rate = 10 run-time = 30s locust_impl.py from locust import task, FastHttpUser class TargetURL: ROOT = "/" STRING = "/string" JSON = "/json" CALC = "/calc" class LocustImpl(FastHttpUser): @task def root(self): self.client.get(TargetURL.ROOT) @task def string(self..

Python/Open Source

[Locust] 1. Locust 부하 테스트 툴(load testing tool)

Locust란? https://locust.io/ https://docs.locust.io/en/stable/ Locust는 오픈 소스로 제공하는 부하 테스트 툴 프레임워크. 매우 간단한 소스코드를 통해 기능을 수행할 수 있고 제공해주는 설정들을 통해서 유저 수량 지정 테스트 등 다양한 테스트를 진행 할 수 있음. 간단한 개발과 설정으로 빠르게 테스트를 할 수 있는 환경을 갖출 수 있음. 설치 pip install locust 실행 locust.conf locustfile = locust_impl.py expect-workers = 5 host = http://localhost:8000 users = 10 spawn-rate = 10 run-time = 1m locust_impl.py from locus..

Python/Open Source

ChatGPT를 이용한 간단한 Web App 만들기 (python, streamlit)

Python Streamlit을 통해서 간단한 ChatGPT Web App 만들어보기 우선, Streamlit 이란? https://docs.streamlit.io/ streamlit는 주로 데이터 사이언스, 머신 러닝 등에서 사용되는 커스터 마이징 가능한 간단하고 쉽게 웹앱을 만들어주는 오픈 소스이다. 사용할 ChatGPT SDK, Reverse Engineered ChatGPT API revChatGPT repo는 abandod or deprecated 되었습니다. python OpenAI sdk 사용을 권장 합니다. https://github.com/acheong08/ChatGPT Python 패키지 설치 pip install revChatGPT pip install streamlit chatgpt..

Python/Python

[Python] Linter 비교

Python Linter Linter 종류와 개요 구 분 flake8 pylint bandit 종 류 linter linter security linter Star 2.3K 4.2K 4.5K 특 징 코드 스타일, 오류 복잡성 검사 코드 스타일, code smell, 오류 등을 검사 unsafe coding 검사 장 점 간단함, 많은 플러그인이 있음 세팅 비용이 flake8 비해 높음 단 점 많은 플러그인을 있음 린트 통과가 flake8 비해 까다로움 다른 개발자들은 어떻게 사용할까 (from Reddit, StackShare) flake8 + pylint 사용하는 경우 flake8 + pylint + bandit 사용하는 경우 (flake8 or pylint) + bandit 사용하는 경우 전자들과 추가..

Python/Python

[Python] lru_cache

[Python] lru_cache 0. 개요 LRU(Last Recently Used) 는 운영체제 OS에서 메모리 관리에서 Page 교체에서 사용되는 알고리즘 중 하나로 가장 오랫동안 사용하지 않은 것을 교체하는 방식입니다 알고리즘 설명 : https://www.geeksforgeeks.org/lru-cache-implementation/ Python에서는 @lru_cache 로 데코레이터로 기능을 제공해주고 있습니다. 1. 기대 효과 Memorization 으로 추가 계산 감소 CPU-Bound 감소 2. Sample Code lru_cache 데코레이터는 실행 함수에 3가지 함수를 추가합니다. 사용 방법은 @lru_cache(maxsize=128, typed=False) maxsize : lru_c..

Python/Python

[Python] Object class __slots__를 이용한 성능 개선

[Python] Object class __slots__를 이용한 성능 개선 0. 개요 Python에서는 Object attribute에 대해서 메모리는 더 적게 사용, 접근 속도는 더 빠르게 하는 방법이 있습니다. 바로, __slots__ 를 사용하는 방법 입니다. 기본적으로 Python은 객체 인스턴스 속성을 Dict를 사용 생성하며 Dict 형은 메모리를 추가적으로 필요로 합니다. slots 을 사용 하는 경우 class는 __dict__, __weakref__ 생성을 하지 않습니다. It restricts the valid set of attribute names on an object to exactly those names listed. Since the attributes are now fi..

Python/Python

[Python] Concurrency Thread Decorator - 3

[Python] Concurrency Thread Decorator Thread Decorator 정말로 간단한 함수들을 Thread를 사용하기 위해 계속 같은 코드를 구현하는 것을 피곤하다. 다행히도 Python은 Decorator 기능이 있다. Decorator기능을 활용해서 간단한 비동기 I/O 함수들은 Thread로 동작하도록 하자. HTTP Reqeust는 Thread 보다는 async await를 활용한 Coroutine으로 작성하고 안에는 꼭 비동기를 지원하는 패키지를 사용하자. def using_thread(func: Callable): def decorator(*args): th = Thread(target=func, args=(*args,)) th.start() return th ret..

Python/Python

[Python] Concurrency PDF 파일 생성 - 2

PDF 파일 생성 PDF 파일 생성은 비동기 I/O 작업이다. 평벙하고 쉽게 누구나처럼 그냥 함수 혹은 클래스 작성해서 반복문으로 구현할 수도 있지만, 정말로 업무가 급하고 그런게 아니라고 한다면, 빠르게 동작을 할 수 있도록 하자. Sample Data와 Package import random import uuid from threading import Thread from faker import Faker from fpdf import FPDF fake = Faker() class Person: # slots는 Class attr에 빠른 접근 및 제어, 적은 메모리 사용에 이점이 있다. __slots__ = ['name', 'age', 'location'] def __init__(self, name:..

Python/Python

[Python] Concurrency 어떤 경우에 어떤 것을 사용하는게 좋을까 - 1

어느 상황에 어떤 Concurrency API를 사용하는게 좋을까 우리는 평소 개발 업무를 하면서 최대한 Response latency, Memory Usage 등을 줄이기 위해 노력을 한다. 예를 들어, ORM을 사용하는 경우 N+1 이나 1+N+a 등 Query Fetch를 줄이거나 또는, Algorithm을 이용해 시간복잡도를 최대한 적게 할려고 하는 등 말이다. 그럼 Python에서 비동기 소스를 개발할 때는 어떠한 경우에 어떻게 해야 좋은지 알아보자. 우선 Python이 제공하는 concurrency API는 다음과 같다. Coroutine: asyncio module Thread: threading module Process: multiprocessing module 이 3가지의 module ..

Python/Python

[Python] 음성인식(Speech Recognition) 과 TTS 구현 - 3

TTS with FastAPI FastAPI에서 TTS 구현 app/api/tts.py DB exist 체크로 생성되지 않았던 tts파일만 생성 하도록 되어있는데 사용량이 많다고 한다면 Insert가 많아지니 당연히 DB에 부담이 갈수 있다. 따라서, Redis Set로 저장하고 체크하는 것이 더 효율적으로 보인다. @router.get("/tts/{text}", response_class = FileResponse) async def get_tts_mp3(text: str, db: Session = Depends(get_db)): if not tts_record_repo.is_exist_tts_record(db, text): tts_record_repo.create_tts_record(db, text)..

Python/Python

[Python] 음성인식(Speech Recognition) 과 TTS 구현 - 2

Python TTS 방법 TTS(Text to Speech) 기술은 유튜브, 트위치 등 인터넷 방송 뿐만 아니라 네이버, 구글 번역 사이트 등 발음 기능 등으로 웹 서비스로도 많이 사용 되는데 TTS는 어떻게 작동 되는지 한번 알아보자. 1. TTS 개요 TTS는 머신 러닝 등을 이용하여 텍스트에서 인간의 발언으로 구현해주는 것이다. TTS를 이용하여 메뉴얼 녹음이라든지 회사 비지니스 관점에서 시간이나 돈 등을 절약할 수 있는데 https://github.com/pndurette/gTTS TTS 구현 방법 연결 (Concatenative) 방식 녹음된 오디오의 조각을 이어 붙이는 방식으로 매우 고품질을 제공하지만 머신 러닝을 위해서 많은 데이터가 필요하다. 매개변수 (Parametric) 방식 주어진 텍..

Python/Python

[Python] 음성인식(Speech Recognition) 과 TTS 구현 - 1

Python Speech Recognition 방법 파이썬에서 음성 인식 하는 방법. 음성 인식을 기술을 활요하여 이미 아마존 알렉사, 카카오 미니 등 다양한 제품들이 현재 집에서 서비스를 하고 있다. 그럼 음성인식이란 어떤것이고 어떻게 작동을하고 간단한 개요를 확인하고 파이썬에서 음성인식과 TTS를 활용하여 간단한 데모를 구현 해보자 1. 음성인식 개요 음성인식은 1950년대 Bell Labs에서 연구의 기초를 둔다. 처음에는 한명의 말과 수십개 정도의 단어 정도에서 였지만 현재는 수많은 사람의 말과 수많은 언어의 단어를 인식 한다. 작동 방법 → Physical Sound with Microphone → Electrical Signal → Digital Data with Analog-to-Digita..

Python/Python

[Python] Thread와 Async를 이용한 비동기 방법

Python Thread와 Async를 이용한 비동기 방법 이후 Client에서 Request 보낼 Server의 소스는 다음과 같다. @router.get("/second") async def second(): return { "second": random.randint(1, 100), } 그리고 일반 함수를 생성해서 Server로 Request 했을 때, 약 20초 걸린다. import datetime import requests def second_request(): resp = requests.get("http://localhost:8090/second") start = datetime.datetime.now() for _ in range(0, 10): second_request() print(d..

Python/Python

[Python] DTO, Dataclass Validate 방법

Validate Class Attributes in Python Python에서 DTO, Data Class로 사용하는 Class를 Validation 하는 여러 방법을 알아보자 1. Validation method 사용 간단한 방법으로 __init__ 메소드에서 validate 하는 방법이다. 만약 유효하지 않다면 ValueError Exception 처리 될것이다. class Person(object): def __init__(self, id: int, name: str, age: int): self.id = id self.name = self._clean_name(name) self.age = self._clean_age(age) def _clean_name(self, name: str): if n..

Python/Python

[Python] 후위표기법(postifx) 계산 코드

후위표기법(postfix) 계산 코드 from typing import List, Optional class Profit(object): __slots__ = ['subject_name', 'profit_value'] def __init__(self, subject_name: str, profit_value: float): self.subject_name = subject_name self.profit_value = profit_value def find_profit_by_subject_name(profits: List[Profit], subject_name: str) -> Optional[Profit]: for p in profits: if p.subject_name == subject_name: re..

Python/Python

Python 에서 go 함수 사용 하는 방법

Python With Go Python 은 쉽고, 깔금하고, 독립적이며, 짧은 시간안에 개발을 할 수 있으며, 수많은 라이브러리들을 사용 할 수 있다는 점에서 좋은 언어 이다. 다만, 파이썬의 장점의 모든 것들은 속도 라는 대가를 가진다. (numpy 같은 c 라이브러리 제외 하고는...) pypy 나 pyc 등에 속도 향상을 대체도 있지만 실제 사용해보면 현실은 녹록치 않다. Go to Python Go 에서는 Go 를 C에 연결을 혹은 C를 Go에 연결을 도와주는 라이브러리를 제공한다. https://golang.org/cmd/cgo/ Python 에서는 C 모듈을 가져와서 사용 할 수있는 기능이 있기 때문에 Go도 마찬가지로 사용이 가능하다. Go .so 파일 만들기 import "C" 와 사용 할..

Python

[Python] __slots__ method

slots 기본적으로 파이썬에서는 객체의 인스턴스 속성을 저장하기 위해서 dict 를 사용 하는데 이를 통해 런타임 중 속성을 변경할 수 있다. 하지만 dict 는 메모리를 낭비하는 경향이 있다. slots를 사용하는 경우 두가지 효과가 있다. 속성에 대한 빠른 접근 class Normal(object): pass class UsingSlots(object): __slots__ = ['name'] normal = Normal() use_slots = UsingSlots() def fn_set_get_delete(cls): def set_get_delete(): setattr(cls, 'name', 'foo var') getattr(cls, 'name&#3..

Python/Python

[Python] __new__ method

파이썬 Magic Method https://docs.python.org/ko/3.7/reference/datamodel.html#special-method-names new 인스턴스 생성시 호출되며 Static method 이다. 일반적인 구현은 super().new(cls) 로 인스턴스 생성후 Return 전에 필요한 작업을 함 만약 인스턴스를 Return 하지 않는다면 init 은 호출되지 않는다. class Sample(object): def __new__(cls, *args, **kwargs): print('new', args, kwargs) this = super().__new__(cls) cls.args = args cls.kwargs = kwargs return this def __init..

상쾌한기분
'Python' 카테고리의 글 목록