Python
-
Python - PropertyPython 2024. 2. 19. 21:35
1. 사전 지식 - 파이썬 클래스 - 데코레이터 - 클래스로 코드를 작성한 경험 및 인스턴스의 속성(상태)을 다루어본 경험 2. Property은 무엇이고 장점은 무엇이고 항상 써야하는가? Property Python의 property()를 사용하면 클래스에서 속성(상태)을 생성할 수 있음 안정적인 API를 제공하면서 클래스와 객체에 의존하는 사용자의 코드를 깨뜨리지 않고도 코드 변경을 관리할 수 있음(=코드의 유지보수성과 확장성 향상) 일반적인 케이스(아래 예시와 같은)는 인스턴스 속성을 접근/수정/삭제 하는 것임(클래스 속성이 아님) 장점 속성을 정의하는 데 사용되는 문법은 매우 간결하고 읽기 쉬움 인스턴스 속성에 직접 접근하거나 수정하는 것을 피하면서도, 마치 공개 속성처럼 정확하게 접근할 수 있으..
-
Asyncio - async, awaitPython 2022. 7. 2. 17:40
* 최근 asyncio 를 api 테스트를 하면서 많이 사용하게 되었다. 사실상 지금은 부하테스트용도로 만들긴 했지만 실제 1초에 수만건 이상의 요청을 테스트하기 위한 다른 툴을 나중에 적용해보면 좋을듯 싶다. * 오늘 이 글의 작성 목적은 코드로 구현 하는 것보다는 Asyncio에 대한 히스토리, 개념 등에 조금 더 알고 이해한 내용에 대해 기록하는 것이다. * 파이썬 공식문서와 여러 블로그들을 읽었는데 블로그는 대부분의 내용이 겹쳤다. 파이썬 공식문서가 오히려 더 다양하게 설명되어 있고, 필요한 부분만 적을 예정이다. Asyncio - https://docs.python.org/3/library/asyncio.html A library to write concurrent code using the a..
-
Flask - Celery - 비동기 처리하기Python 2022. 2. 7. 12:52
Celery Python 동시성 프로그래밍에서 가장 많이 사용하는 방법 중 하나이며, 분산 메시지 전달을 기반으로 동작하는 비동기 작업 큐(Asynchronous Task/Job Queue) 웹서버레벨에서 모든것을 다 처리하기엔 부담이 크거나, 외부의 모듈과 협업해야 할 때, 즉 비동기적으로 요청에 대한 부하를 외부에 전가 Celery client: Flask app 에서 celery 백그라운드 잡을 실행시키기 때문에 Flask app이 됨 Celery workers: 백그라운드 잡을 실행하는 프로세스들. local, remote workers들이 있고, 확장가능함 Message broker. Celery client(Flask App)에서 Celery workers과 통신, RabbitMQ and Re..
-
Python Asyncio - 코루틴, 크롤링Python 2022. 1. 18. 16:15
복수개의 사이트에서 웹 페이지 가져오는 작업을 비동기로 구현하여 속도 개선 (https://docs.python.org/ko/3/library/asyncio-task.html) (https://docs.python.org/ko/3/library/asyncio-eventloop.html) 코루틴 async/await 문법으로 선언된 코루틴은 asyncio 응용 프로그램을 작성하는 기본 방법 Awaitable Object await 표현식에서 사용될 수 있을 때 어웨이터블 객체 - 직접 async 함수를 작성하거나 외부 라이브러리의 경우 async로 구현된 것을 사용해야함 Future 비동기 연산의 최종 결과를 나타내는 특별한 저수준 awaitable object로, Future 객체를 기다릴 때, 그것은 ..
-
OOP - 상속,변수, 초기화- Crawling/Custom ExceptionsPython 2022. 1. 13. 18:04
클래스 변수 - 모든 인스턴스가 변경, 모든 클래스에서 공유 인스턴스 변수 - 인스턴스 마다 사용, 해당 인스턴스만 사용, 클래스 객체에서 접근 불가능 클래스 변수에 접근할 때는 특별히 이유가 없다면 '인스턴스.클래스변수' 나 'self.클래스변수'와 같이 접근하는 것을 피해야함 방법 cls.변수(클래스메소드 안에서), Class.변수(클래스 외부에서) type(self).변수(메소드내) 인스턴스 변수를 인스턴스 객체로부터 생성하는 것이 가능하므로 의도치 않게 클래스 변수를 인스턴스 변수로 은폐해버릴 수 있음 -> 인스턴스 변수와 클래스 변수 혼용하지 말것 class Crawler: # 크롤링을 하며 인스턴스마다 다른/저장하는 데이터들은 인스턴스 변수에 저장 def __init__(self, loggin..
-
[TEST] 2.테스트 코드 작성하기Python 2021. 10. 24. 23:57
이전 글 2021.10.23 - [개발 고민들] - [TEST] 1. 테스트를 시작하게 된 계기 코드 # tests/conftest.py @pytest.fixture def client(): app = create_app() app.config["TESTING"] = True app.testing = True with app.test_client() as client: app.config["SQLALCHEMY_DATABASE_URI"] = "db url" with app.app_context(): db.create_all() yield client db.session.rollback() db.session.close() # db.drop_all() # 모든 테스트에서 테이블 삭제로 인한 속도가 느려짐 #..
-
객체 지향 프로그래밍 - 크롤러 개발Python 2021. 10. 12. 17:18
크롤러 개발 히스토리 1. 2019년 5월 하나의 특허 사이트에서 특허데이터들을 엑셀로 다운받는 크롤러를 개발(개인 프로젝트) 2. 2020년 4월 특정 아이템에 대해 여러 사이트에서 아이템들에 대한 데이터들을 수집하는 크롤러 개발 3. 2020년 8월 여러 뉴스 사이트에서 뉴스 기사들을 수집하는 크롤러 개발 4. 2021년 10월 여러 영어 사전 사이트에서 영어 구어체의 정의와 예제를 수집하는 크롤러 개발 1번 크롤러 2,3,4 크롤러와 다른 점은 하나의 사이트에서만 데이터를 수집했었다. 개발을 막 시작했던 당시에 개발했고, 클래스가 아닌 함수로 하나의 파이썬 파일에 다 적었다. 리팩토링 변수 -> title -> t, abstract -> abs 등과 같이 짧게 네이밍 했던 부분 고침 데이터 구조 -..
-
Python - Clean code - better/good/bad examplesPython 2021. 2. 10. 11:10
github.com/zedr/clean-code-python zedr/clean-code-python :bathtub: Clean Code concepts adapted for Python. Contribute to zedr/clean-code-python development by creating an account on GitHub. github.com Use meaningful and pronounceable variable names import datetime ## bad ymdstr = datetime.date.today().strftime("%y-%m-%d") ## good current_date: str = datetime.date.today().strftime("%y-%m-%d") Use..