Python 308

[Python] HTTPX - 비동기/동기 http 라이브러리

개요2025.04.13-[Python] requests Transport Adapters - 요청 재시도에서 Python requests 모듈로 http 요청 재시도를 수행하는 멋진 방법을 살펴보았는데, 이 과정을 비동기 방식으로 수행하고 싶다. 하지만 requests 모듈은 비동기 프로그래밍을 지원하지 않는 것 같다.관련해서 동기식, 비동기식 프로그래밍을 모두 지원하는 HTTPX라는 라이브러리가 있다는 것을 알게 되었다. 아주 기본적인 사용 방법을 적어둔다. HTTPXPython3용으로 설계된 HTTP 클라이언트로, 동기 및 비동기 API, 그리고 HTTP/1.1과 HTTP/2를 모두 지원한다.공식 문서에 따르면 requests 라이브러리의 표준 기능 모두 지원하며, WSGI 또는 ASGI에 직접 요..

Python 2025.05.13

[Pandas] itertuples - 컬럼 접근 방법(?)

개요Pandas에서 DataFrame.itertuples을 사용하면 DataFrame의 각 행을 namedtuples 형식으로 반환한다.이번 글에서는 이 namedtuples을 사용해 컬럼에 접근하는 예시를 하나 적어두려고 한다. + 다른 사람이 작성한 코드에서 봤는데, 낯선 방법이라 적어둔다. 방법itertuples 함수 결과로 변환된 row는 Pandas 객체이다. 이 부분은 namedtuples의 type을 확인해보면 알 수 있다.import pandas as pddata = {'col1':[1,2],'col2':[3,4]}idx = ['row1','row2']df = pd.DataFrame(data = data, index=idx)for row in df.itertuples(): print..

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

개요2025.04.12-[Python] sqlite3 - SQLite 사용하기에서 Python으로 sqlite를 다루는 방법을 정리했었다. 추가로 sqlite를 비동기로 다룰 일이 생겨서 아래와 같이 코드를 짜봤는데,import sqlite3import asyncioasync def main(): sql = 'SELECT * FROM stocks WHERE symbol=:symbol' condition = {'symbol': 'RHAT'} async with sqlite3.connect('example.db') as con: cur = await con.cursor() await cur.execute(sql, condition) data = await..

Python 2025.04.29

[Python] sqlite3 - SQLite 사용하기

개요이전에 2023.01.08-[SQLite] 설치 및 사용에서 간단한 파일 데이터베이스인 SQLite를 설치하고 실행해 보았다. 당시에는 CLI를 활용하여 SQLite를 다뤘는데, 이번에는 Python으로 SQLite를 다뤄보려고 한다.방법을 알아보자. sqlite3SQLite 데이터베이스용 라이브러리인 sqlite3는 Python 기본 내장 라이브러리로 별도로 설치하지 않고 바로 import 하여 사용할 수 있다.import sqlite3 데이터베이스 연결connect 함수를 사용하여 데이터베이스 연결을 생성한다. 기본적으로 connect 함수로 전달한 값이 파일 DB의 경로가 된다.import sqlite3con = sqlite3.connect('example.db')아무 테이블도 생성하지 않..

Python 2025.04.25

[Python] Pandas - Display 옵션 조정

개요Jupyter 노트북 환경에서 작업을 하다 보면 DataFrame을 확인할 때 컬럼이나 행이 생략되어 전체 정보를 확인할 수 없는 경우가 있다. 이런 경우 생략하는 정도를 조정하면 보다 효율적으로 데이터를 조회할 수 있다. 현재 옵션 확인옵션을 조정하기 전에 먼저 어떤 옵션이 있는지 확인할 필요가 있을 것 같다.옵션에 대한 설명은 pandas.describe_option을 통해 확인할 수 있다.import pandas as pdpd.describe_option()코드 상으로도 확인할 수 있지만 공식 문서를 활용하는 게 더 수월할 수 있다.https://pandas.pydata.org/pandas-docs/stable/user_guide/options.html#available-options 인쇄..

[Python] aiofiles - 비동기 파일 작업

개요Python으로 비동기 프로그래밍을 진행 중인데, 프로그램 결과 파일을 생성해야 한다. 그런데 Python에서 파일을 다룰 때 사용하는 open 함수는 비동기를 지원하지 않는다고 한다. 이 문제를 해결하기 위해 Python 비동기 프로그래밍으로 파일 작업을 할 수 있도록 지원해 주는 ailfiles라는 라이브러리 사용 방법을 알아본다.   aiofilesaiofiles은 비동기 애플리케이션에서 로컬 디스크의 파일을 처리하기 위해 Python으로 작성한 Apache 2 라이센스의 라이브러리다.일반적으로 로컬 파일 IO는 블로킹이기 때문에 쉽게 비동기 방식으로 수행할 수 없다. 다시 말해 파일 IO 수행은 비동기 애플리케이션에 영향을 줄 수 있기 때문에, 실행 중인 스레드를 차단해서는 안 된다. 하지만 ..

Python 2025.04.17

[Python] websockets - 웹소켓 연결 확인

개요2025.04.06-[Python] websockets - 연결 종료 시 자동 재연결에서 연결이 자동으로 종료되는 경우, 자동으로 재연결을 시도하도록 코드를 개선했었다.확인해보니 어떤 웹소켓 서버의 경우에는 기본적으로 아무 데이터도 수/발신하지 않는 상태로 120초 정도가 경과하면 웹소켓 연결을 종료한다고 한다. 때문에 websockets 라이브러리는 클라이언트에서 서버와의 연결을 확인함과 동시에 keepalive 역할을 할 수 있는 ping 함수를 제공하고 있다. 사용 방법을 가볍게 알아본다.  websockets.pingwebsockets.ping 함수는 0x9 연산코드를 포함하는 Ping 프레임을 보낸다. pong_waiter = await websocket.ping()# only if you ..

Python 2025.04.15

[Python] 여러 웹소켓 연결하기

개요Python으로 WebSocket 통신이 필요한 프로그램을 개발하고 있는데, 여러 웹소켓 통신 연결 및 유지가 필요한 상황이다. 평소 Python으로 개발을 할 때 특정 서버, 그것도 여러 서버와 지속적인 통신 연결을 유지할 상황이 많지 않았다. 이번 기회에 적당한 방법을 정리해 둔다.   웹소켓 통신 함수먼저 웹소켓 통신을 유지할 함수를 작성한다. 함수는 2025.04.06-[Python] websockets - 연결 종료 시 자동 재연결에서 작성한 코드이다. 다만 재사용성을 확보할 수 있도록 통신할 URL과 전송할 데이터를 매개변수로 전달받을 수 있도록 수정했다.import asynciofrom websockets.asyncio.client import connectimport jsonasync ..

Python 2025.04.14

[Python] websockets - 연결 종료 시 자동 재연결

개요Python websockets 라이브러리르 사용해서 가상 자산 거래소에 orderbook 정보를 구독하고 있는데, 일정 시간이나 횟수가 지나면 자동으로 연결이 종료되는 문제가 발생했다.관련해서 자동으로 연결을 재시도할 수 있도록 코드를 변경해보려고 한다.   기존 코드import asynciofrom websockets.asyncio.client import connectimport jsonasync def connect_test(): url = "wss://ws-api.korbit.co.kr/v2/public" send_data = [ { "method": "subscribe", "type": "orderbook", ..

Python 2025.04.11

[Python] websockets - 웹소켓 서버 및 클라이언트 개발

개요최근 WebSocket 통신을 다룰 일이 생겼다. 관련하여 Websocket 서버와 클라이언트를 구축하기 위한 Python 라이브러리인 websockets 사용 예시를 간단하게 적어두려고 한다.websockets 라이브러리는 기본적으로 Python 내장 비동기 I/O 라이브러리인 asyncio를 기반으로 한다. threading 구현을 제공하고 있어 asyncio에 익숙하지 않은 경우의 대안을 제공하기도 한다.  WebSocket이란먼저 WebSocket 개념에 대해 빠르게 정리한다.WebSocket은 클라이언트와 서버 간의 양방향 데이터 전송을 가능하게 하는 실시간 통신 프로토콜이다. 비상태 프로토콜인 HTTP와 달리 클라이언트와 서버 간의 지속적인 연결을 유지하여 즉각적인 데이터 전송을 허용한다...

Python 2025.04.10