python 281

[Python] Datetime - isoformat

개요최근 Airflow 2.5.1 버전에서 2.8.2 버전으로 업그레이드 테스트를 진행하고 있는데, Airflow의 Dag run context의 execution_date 값의 문자열 형식이 다음과 같이 바뀐 것 같다. 스케쥴에 의한 트리거매뉴얼 트리거2.5.12024-07-31T00:00:00+00:002023-05-10T01:51:17.686430+00:002.8.22024-07-31 00:00:00+00:002023-05-10 01:51:17.686430+00:00execution_date 값의 문자열 데이터를 파싱 하는 부분이 있어서... 변경된 형식을 기존 형식으로 변경하고 싶다.확인해 보니 기존 형식이 ISO 8601 형식인 것 같다. python에서 datetime 값을 ISO 8601 형..

Apache Airflow 2024.08.30

[Python] 동적으로 변수에 접근하기

개요특정 변수의 값에 따라 변수를 동적으로 접근하고 싶다. 예로 들어, 아래와 같이 API를 호출할 때 사용하기 위한 APICaller라는 클래스가 있다고 하자.class APICaller(): def __init__(self): self.t10_url = "http://127.0.0.1:10000" self.t20_url = "http://127.0.0.1:20000"APICaller는 API 요청할 서버의 타입 별로 url 값을 갖고 있다. 즉, t10_url은 t10이라는 서버 타입의 url이고, t20_url은 t20이라는 서버 타입의 url이다. 이때, 조건문을 사용하지 않고 API를 보낼 서버 타입을 의미하는 server_type 변수 값에 따라 APICaller..

Python 2024.08.19

[Python] Logging - 중복 로깅 해결

현상Python 프로그램의 로깅을 위해 Logging 모듈을 사용하고 있는데, 테스트하다보니 아래와 같이 같은 로그가 두 번 출력되는 현상을 확인할 수 있었다.불필요한 중복 로그를 출력하지 않도록 문제를 해결해보자.  현상 재현먼저 Logger를 편하게 사용하기 위해 다음과 같이 생성 함수를 정의했다.import loggingdef getlogger(title): logger = logging.getLogger(title) logger.setLevel(logging.INFO) formatter = logging.Formatter('[%(asctime)s] [%(module)s.%(funcName)s :%(lineno)d] %(levelname)s:%(message)s') log_st..

Python 2024.08.16

[Python] Requests hooks - 매개변수 전달하기

개요2024.07.18-[Python] Requests hooks - 응답에 대한 콜백 구현하기에서 python requests를 사용하여 응답에 대한 콜백을 구현했는데, 이번 글에서는 콜백 함수에 매개변수를 함께 전달하는 방법을 몇 가지 살펴본다.   partial 활용2022.10.19-[Python] functools.partial - 함수 재활용에서 살펴봤던 partial 함수는 전달받은 함수에 전달받은 인자값을 채워 넣은 함수를 생성할 때 사용한다. 따라서 hooks에 함수를 전달할 때 partial로 인자값이 채워진 함수를 전달할 수 있다. 다만 kwargs로만 참조할 수 있다. 콜백으로 수행할 함수를 다음과 같이 정의했다고 하자.import requestsfrom functools impor..

Python 2024.08.15

[Python] Requests hooks - 응답에 대한 콜백 구현하기

개요Python Tornado를 사용해서 API를 개발하고 있는데, 다른 서버에 요청을 보낸 후 추가로 처리해야 하는 부분을 콜백 방식으로 구현하려고 한다.관련하여 Requests 라이브러리에서 제공하는 hooks에 대해 적어둔다.   + tornado에서 httpclient.HTTPRequest를 사용하여 요청을 보낼 수도 있는데, 이번 글에선 requests 라이브러리를 사용해 보겠다.  hooksrequests 라이브러리는 요청 프로세스 일부를 조작하거나 이벤트 처리 신호를 보내는 데 사용할 수 있는 hook 기능을 제공한다. requests 응답 후에 호출되는 콜백 함수에 해당한다.실행할 콜백함수는 요청 시 hooks 매개변수에 hook 이름을 키로 하고 실행할 함수를 값으로 하는 딕셔너리 형식으..

Python 2024.08.09

[Tornado] RequestHandler - initialize에 값 전달하기

개요2024.06.28-[Tornado] RequestHandler - 동작 순서와 메서드 재정의에서 initialize 함수는 전달받은 매개변수를 멤버 변수로 저장하는 역할을 수행한다고 했었다.이번 글에서는 initialize에 매개변수를 전달하는 방법을 적어둔다.  RequestHandler예시로 아래의 MainHandler의 initialize는 2개의 매개변수를 전달받아 멤버 변수로 저장한다.class MainHandler(RequestHandler): def initialize(self, admin_id, admin_password): self.admin_id = admin_id self.admin_password = admin_password  Applicatio..

Python 2024.07.26

[Python] 클래스의 이름 출력하기

개요Python에서 로그를 출력할 때, 어떤 클래스에서 동작하는 함수인지를 확인하려고 한다. 그래서 클래스의 이름을 출력하고 싶다.방법을 적어둔다.   __class__.__name__Python의 모든 객체는 __class__라는 속성을 가지는데, __class__ 속성에는 객체의 데이터 타입, 즉 클래스에 대한 정보가 저장되어 있다. 그 중 클래스의 이름은 __class__.__name__ 속성에 접근하여 사용할 수 있다.class Character(): def __init__(self): self.life = 1000 def print(self): print(self.__class__.__name__)lisa = Character()lisa.print()__cla..

Python 2024.07.25

[Python] logging - 일정 주기로 로그 파일 회전하기

개요이전에 2022.02.14-[logging] Logger/Handler/Formatter 글에서 Python의 Logger를 살펴보았었다. 기존에는 여러 Log 핸들러 중에서 StreamHandler와 FileHandler를 사용했는데, 이번 글에서는 TimedRotatingFileHandler를 사용해 로그를 남겨보려고 한다.  TimedRotatingFileHandlerTimedRotatingFileHandler는 특정 시간 간격을 기준으로 로그 파일을 회전시키는 핸들러다.일반적인 FileHandler는 정해진 파일 하나에 계속해서 로그를 누적시키기 때문에 로그 파일 하나의 용량이 대단히 커질 수 있다. 하지만 TimedRotatingFileHandler는 특정 주기, 예로 들어 하루에 한 번이나..

Python 2024.07.24

[Python] Coroutine 개념

개요2024.06.26-[Python] asyncio - 비동기 프로그래밍에서 코루틴이라는 개념이 나왔는데, 관련하여 개념적인 부분만 조금 적어둔다.  메인루틴과 서브루틴Python에서는 함수를 호출하면 기본적으로 함수가 끝나고 현재 코드로 다시 돌아온다. 예로 들어 아래와 같은 코드가 있다고 하자.def add(a, b): c = a + b # add 함수가 끝나면 변수와 계산식은 사라짐 print(c) print('add 함수')def calc(): add(1, 2) # add 함수가 끝나면 다시 calc 함수로 돌아옴 print('calc 함수')calc() calc 함수에서 add 함수를 호출하면, add 함수의 실행이 완료되고 다시 calc 함수로 돌아온다. 무엇보..

Python 2024.07.22

[Python] asyncio - 비동기 프로그래밍

개요2024.06.25-[프로그래밍] 동기(Synchronous) VS 비동기 (Asynchronous)에서 동기, 그리고 비동기에 대한 개념을 살펴보았다.Python의 경우, 기본적으로 동기 프로그래밍 언어다. 아래와 같이 def 키워드로 생성한 함수는 모두 동기 방식으로 동작한다.def do_sync(): return 'sync'하지만 Python 3.4에서 비동기 프로그래밍을 위한 asyncio 라이브러리가 표준 라이브러리로 추가되고 async/await 키워드가 문법으로 채택되며, Python에서도 외부 라이브러리 설치 없이 비동기 프로그래밍이 가능하게 되었다. 이번 글에서는 Python으로 비동기 프로그래밍을 하기 위한 asyncio 라이브러리의 기본 사용법에 대해서 적어둔다.  async..

Python 2024.07.19