파이썬 19

Pandas dataframe 메모리 사용량 확인하기

Pandas의 dataframe 및 각 column의 메모리를 체크하는 방법은 매우 간단합니다. dataframe 전체 메모리 dataframe.info() 메서드를 이용하면 맨 아래 memory usage가 출력됩니다. >>> df.info() RangeIndex: 173511 entries, 0 to 173510 Data columns (total 47 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 id 173511 non-null int64 1 created_at 173511 non-null datetime64[ns] 2 updated_at 173511 non-null datetime64[ns] 3 deleted_..

Airflow Taskflow로 DAG refactoring하기

Introduction 안녕하세요. 이번 글에서는 Taskflow를 사용해서 다른 외부 Operator가 아닌 파이썬 Operator로만 이뤄진 DAG을 리팩토링 한 경험을 공유하려고 합니다 Taskflow란 Taskflow란 Airflow2.0에서 출시된 concept으로 Operator가 아닌 파이썬 로직들로만 이뤄진 DAG의 경우 @task decorator를 활용해서 깔끔하게 로직을 관리할 수 있습니다. 실제로 DB의 incremental data나 API나 크롤링을 통해 진행되는 작은 배치들(수십 MB 이하)은 Pandas의 Dataframe을 통해서도 쉽고 빠르게 조작이 가능합니다. Taskflow의 장점은 Xcoms을 사용하여 return 값을 전달해서 작업 간에 결과를 전달하기 편리합니다...

Airflow Sensor 정리 (feat. S3 Sensor)

Concept Operator의 한 가지 type으로 wait for something to occur 이라는 한 가지 목적으로 만들어졌다. time-based로 어떤 이벤트 또는 조건이 성사되는 것을 기다린다. 여기서 something은 아래와 같은 것들이 있다. file의 생성여부 external event 그 밖의 다양한 기다릴 수 있는 조건 or event. 기본적으로 해당 event가 일어날 때 까지 기다리다가 발생하면 다음 downstream의 task가 동작할 수 있도록 하는 역할을한다. 즉, 어떤 파일이나 이벤트 기반으로 다음 task를 수행해야 할 때 사용할 수 있다. ex) loader라는 서비스에서 file을 지정된 위치에 저장한 후에 compactor라는 서비스에서 데이터를 comp..

Python/Django NewRelic 셋업 및 환경 분리하기.

Introduction 이번 글에서는 Python 및 Django에서 NewRelic을 셋업하고 환경 별로 분리하는 방법을 소개합니다. NewRelic은 대표적인 APM (Application Performance Monitoring) 서비스 중 하나입니다. NewRelic을 설치해서 쉽게 어플리케이션의 병목을 확인할 수 있습니다. 대부분의 내용은 공식 문서에 명시되어 있는 내용이고 제 기준으로 이해하기 쉽도록 정리한 글이라고 생각하시면 될 것 같습니다. Set up newrelic 셋업은 굉장히 간단한 편입니다. 대부분의 웹 프레임워크(Django, Flask 등) 및 호스팅 프로그램(WSGI, Gunicorn, uWSGI)등은 기본 Python Agent 설정만 해주면 됩니다. 웹이 아닌 단순 스크립..

파이썬 SMTP Gmail app password 설정하기

오랜만에 간단하게Gmail Email Client코드를 작성하려는데 예전에 해놓은 설정이 곧 있으면 지원하지 않는 것을 발견했다. 보안 수준이 낮은 앱의 액세스를 2022년 5월 30일부터 막아서, 2-Step auth를 켜고 App password를 사용해야 Python smtp client로 이메일을 보낼 수 있게된다. (기업용 Google workspace는 계속 지원한다고 한다. 개인 메일만 해당된다.) 이전 설정 그 전에 해놓은 설정은 크게 두 가지 였다. 1) Gmail settings -> Forwarding and POP/IMAP 에서 다른 client들에서 IMAP을 이용해서 메일을 보낼 수 있도록 IMAP을 홝성화. 2) 보안 수준이 낮은 앱을 액세스할 수 있도록 설정. Account의..

Fluent Python Chapter 21. 클래스 메타프로그래밍

Introduction 21장은 클래스 메타프로그래밍입니다. 런타임에 클래스를 생성하고 변경하는 프로그래밍 방법을 의미합니다. 파이썬 Guru개발자들을 프레임워크를 만드는것이 아니면 해당 기능을 사용하는 것을 권장하지 않습니다. 해당 기능이 주는 편리함보다는 해치는 가독성이 더 크기 때무일 것 같습니다. 인터프리터단에서 동작하는 부분이 많을수록 파이썬으로 어플리케이션을 주로 개발하는 개발자들에게는 가독성이 좋지 않을 수 있습니다. 해당 장에서는 클래스를 생성하는 함수를 이용해서 클래스를 만드는 것을 시작으로 클래스 데커레이터, 임포트 타임과 런타임, 메타클래스에 대해서 살펴봅니다. 지난 장에서 descriptor 객체의 storage_name이 구분하기 어려웠던 것들을 클래스 데커레이터와 메타클래스를 사..

Fluent Python Chapter 19. 동적 속성과 프로퍼티

Introduction 19장 부터 21장 까지는 이 책에서 마지막 Part인 메타프로그래밍입니다. 메타 프로그래밍에 대한 정의는 7장에서 데코레이터를 살펴보면서 잠시 살펴봤습니다. 다시 한 번 정의만 간단히 살펴보면 다음과 같습니다. 메타 프로그래밍은 컴퓨터 프로그램이 다른 컴퓨터 프로그램을 데이터와 같이 처리하는 능력을 가지도록 프로그래밍하는 방법(technique)이다. 이번 장에서는 동적으로 속성에 접근할 수 있는 방법을 살펴보면서 해당 방법으로 프로그램이 데이터에 따라서 동작하게 됩니다. 동적으로 접근할 수 있는 다양한 방법을 살펴보고, 프로퍼티(property)를 이용해서 데이터에 대한 접근이나 속성에 대한 validation 등을 구현합니다. 또, 마지막 부분에서 다양한 속성 프로그래밍을 지..

Fluent Python Chapter 18. asyncio를 이용한 동시성

Introduction 17장에서는 concurrent.Future를 이용한 동시성 프로그래밍을 다뤘습니다. 18장에서는 asyncio를 이용한 동시성을 구현합니다. concurrent는 thread와 process를 추가로 사용하여 동시성을 추구했었는데 asyncio는 주로 하나의 스레드의 이벤트 루프에서 동시성을 구현합니다. 재미있는 부분 중 하나는 zen of python 중 하나인 '작업을 수행하는 방식이 한 가지만 있어야 한다.' 라는 부분을 asyncio패키지 또한 concurrent와 비슷한 Future 인터페이스를 구현해서 따랐다는 점이다. 이 장에서는 주로 yield from, coroutine, Future 객체, asyncio event loop를 활용해서 동시성을 구현하는 방법을 설..

Fluent Python Chapter 17. Future를 이용한 동시성

Introduction 17장에서는 Future를 이용한 동시성 프로그래밍에 대해서 다룹니다. Future객체는 미래에 앞으로 일어날 일을 나타내는데 해당 객체는 concurrent.futures 뿐만 아니라 asyncio의 패키지의 기반이 되는 개념입니다. 전반적으로 해당 패키지를 통해서 어떻게 프로그램을 동시에 수행시키면 좋을지에 대한 코드를 설명합니다. 또, 파이썬의 GIL이 어떻게 동시성 프로그래밍에서는 동작하는지도 살펴봅니다. 마지막으로는 상위 인터페이스가 맞지 않는 경우에는 threading과 multiprocessing 모듈로 동시성 작업도처리할 수 있음을 간략히 설명합니다. 전반적인 파이썬에서의 동시성 프로그래밍에 대한 내용을 다룬 장이라고 생각됩니다. 책 정리를 시작한 이유 책 정리를 시..

Fluent Python Chapter 15. Context manager와 else 블록

Introduction 15장에서는 주로 Context manager에 대해서 설명합니다. Context manager가 어떻게 도입되게 되었고, 어떤 프로토콜을 구현해야 하는지등을 설명합니다. 단순히 Resource관리를 위해서 사용하는 것이 아닌 다양한 Context를 유지하는데 사용할 수 있는 멋있는 기능입니다. 또, else 블록을 끼워서? 설명합니다. else 블록은 if문 외에도 for, while, try 블록에서도 사용할 수 있는데 이런 부분에 대해서 저자의 생각과 어떨 때 사용하면 좋은지 설명합니다. 책 정리를 시작한 이유 책 정리를 시작한 이유 Chapter1의 Introduction 부분에서 이야기 한 것처럼 지난 5년간 다양한 언어나 프레임워크 및 프로그램을 공부하고 이용하여 소프트..

반응형