Python 21

[python] "from __future__ import annotations"를 이용해야만 하는 이유

파이썬에서 타입 힌트를 사용하다 보면, 생각보다 자주 마주치는 문제들이 있습니다. 바로 "전방 참조(forward reference)" 오류나 "순환 임포트(circular import)" 문제입니다. 이 두 가지 고질적인 문제를 한 줄로 해결해 주는 것이 바로 from __future__ import annotations입니다.이 구문은 어떤 역할을 할까요?모듈의 맨 첫 줄에 이 구문을 추가하면, 해당 모듈 내의 모든 타입 힌트가 즉시 평가되지 않고 문자열로 저장 됩니다. 타입 힌트의 실제 평가 시점을 런타임이 아닌 필요한 시점으로 늦추는 것입니다. 이를 "지연 평가(lazy evaluation)"라고도 부릅니다.어떤 문제들을 해결해 주나요?① 전방 참조(forward reference) 문제 해결클래..

[python] BytesIO에서 "read()"로 읽을 데이터 유무 확인 방법

Python에서 제공하는 "io.BytesIO" 클래스는 메모리 상의 이진 데이터를 파일 객체처럼 다룰 수 있도록 도와줍니다.특히 테스트 환경이나 네트워크 시뮬레이션에서 실제 파일을 만들지 않고도 손쉽게 데이터를 읽고 쓸 수 있다는 장점이 있습니다.하지만 "BytesIO" 객체에서 데이터를 읽을 때, 단순히 "더 읽을 데이터가 남아 있는지" 확인하는 방법은 생각보다 직관적이지 않을 수 있습니다. 이번 글에서는 "BytesIO.read()"와 관련된 데이터 유무 확인 방법을 알아 보겠습니다.1. "readable()" 메서드의 의미먼저 많은 분들이 착각하실 수 있는 부분이 있습니다."BytesIO" 객체에는 "readable()" 메서드가 있는데, 이는 이 객체가 읽기 기능을 지원하는지 여부 만 반환합니다..

[python] 네트워크 시험에서 Stub와 Driver의 개념과 예제

네트워크 또는 통신 프로토콜 시험을 수행할 때, stub과 driver는 시험 환경을 구성하는 데 있어 중요한 역할을 담당합니다. 실제 시스템 전체가 구현되기 전에도 각 부분을 독립적으로 검증할 수 있도록 도와주는 개념이므로, 개발 및 시험 과정에서 널리 활용됩니다.이번 글에서 stub과 driver의 개념과 간단한 예제를 통하여 차이점을 알아 보도록 하겠습니다.Stub의 개요와 특징Stub은 아직 구현되지 않은 상위 모듈을 대신하는 더미 모듈입니다. 즉, 하위 모듈(예: 클라이언트)이 호출할 상위 모듈(예: 서버)이 준비되지 않았을 때, 마치 실제 서버처럼 요청을 받아 예상되는 응답을 반환하는 역할을 합니다.특징을 정리하면 다음과 같습니다.요청에 대해 미리 정의된 응답을 반환실제 상위 시스템이 없어도 ..

[python] "@dataclass"를 활용하여 클래스 작성을 빠르게 해보자

파이썬 3.7에서 도입된 @dataclass 데코레이터는 클래스 작성 방식을 획기적으로 바꾸어 놓은 기능입니다. 복잡하고 반복적인 보일러플레이트 코드(boilerplate code)를 자동화하여 개발자가 핵심 로직에 집중할 수 있도록 도와줍니다.@dataclass란 무엇인가?@dataclass는 파이썬의 dataclasses 모듈에 포함된 데코레이터로, 클래스 선언에 붙여 사용합니다. 이 데코레이터는 클래스의 필드를 기반으로 __init__, __repr__, __eq__ 등의 특수 메서드를 자동으로 생성해줍니다.기본 사용법from dataclasses import dataclass@dataclassclass Person: name: str age: int email: str위 코드는 다..

ctypes.addressof() 함수를 이용하여 bytes 객체를 만드는 방법

Python에서 ctypes.addressof() 함수의 반환값(메모리 주소)을 이용해 일정 길이만큼 bytes 객체를 만드는 방법을 알아 보겠습니다.방법 1: ctypes.string_at() 사용 (권장)import ctypes# 예시: 배열 생성arr = (ctypes.c_int * 5)(1, 2, 3, 4, 5)addr = ctypes.addressof(arr)# 주소에서 특정 길이만큼 bytes로 읽기length = ctypes.sizeof(arr) # 또는 원하는 길이data = ctypes.string_at(addr, length)print(type(data)) # print(data.hex()) # 0100000002000000030000000400000005000000방법 2: ct..

[python] Exception: task_done() called too many times

Python의 queue.Queue에서 "task_done() called too many times" 오류가 발생하는 이유는 task_done() 메서드를 get()으로 가져온 아이템 수보다 더 많이 호출했기 때문입니다.발생 원리Queue는 내부적으로 "처리되지 않은 작업 수(unfinished tasks)"를 카운터로 관리합니다.put()으로 아이템을 넣을 때마다 카운터가 +1task_done()을 호출할 때마다 카운터가 -1카운터가 0보다 작아지려고 하면 이 오류가 발생주요 원인들get() 없이 task_done() 호출import queueq = queue.Queue()q.put("item")q.task_done() # get()을 하지 않았는데 task_done() 호출 - 오류!task_do..

[python] 코드가 실행중일 때, 디버깅 중인지 확인하는 방법

개요파이썬으로 만든 코드를 디버깅할 때와 실제 배포하여 실행될 때 서로 다른 동작을 시켜야할 경우가 있습니다. 디버깅할 때는 디버깅을 위하여 보다 상세한 정보를 출력한다던지 성능과 관계없이 디버깅을 위한 부분을 더 추가해 주게 되는데, 실제 실행할 때는 불필요한 부분입니다.이번에는 파이썬 코드가 실행중일 때, 디버깅 중인지 확인하는 방법을 알아 보도록 하겠습니다.sys.gettrace()from sys import gettracedef is_debugging(): return (gettrace() != None)DEBUGPY_RUNNING 환경변수from os import getenvdef is_debugging(): return bool(getenv('DEBUGPY_RUNNING'))pdb ..

[Python] 품질 설정과 함께 이미지를 JPEG로 저장 방법들

개요Python에서 이미지를 품질 (Quality)을 지정하여 JPEG 형식으로 저장하는 여러 가지 방법을 정리해 둡니다.PIL(Python Imaging Library)/Pillowfrom PIL import Image# 이미지 열기img = Image.open('input.png')# JPEG로 저장img.save('output.jpg', format = 'JPEG')# 품질 설정하여 저장 (1-95)img.save('output_quality.jpg', 'JPEG', quality=85)# RGB로 변환 후 저장 (알파 채널이 있는 경우)img_rgb = img.convert('RGB')img_rgb.convert('RGB').save('output_rgb.jpg', 'JPEG')가장 널리 사용되는..

[python] netmask 문자열로 CIDR 형식의 비트 개수를 반환하는 방법

개요netmask 문자열(예: "255.255.255.0")을 CIDR 형식의 비트 개수(접두사 길이)를 얻는 방법을 정리해 둡니다.CIDR 표기법이란?CIDR(Classless Inter-Domain Routing) 형식은 IP 주소와 네트워크 마스크를 표현하는 간결하고 유연한 방법입니다. CIDR 표기법의 주요 특징은 다음과 같습니다.IP 주소와 접두사 길이로 구성: 예를 들어, 192.168.0.0/24 형태로 표현합니다.접두사 길이: '/' 뒤의 숫자(0-32)로, 네트워크 부분의 비트 수를 나타냅니다.유연한 네트워크 구분: 기존의 클래스 기반 주소 체계와 달리, 네트워크와 호스트 부분을 유연하게 정의할 수 있습니다.효율적인 IP 주소 관리: 네트워크 주소 자원을 절약하고 효율적으로 할당할 수 있..

[jetson] Namespace GstRtspServer not available 오류 해결 방법

문제점 및 증상 DeepStream SDK 파이썬 예제중에서 "rtsp"로 출력하는 예제를 실행했더니, 다음과 같이 "ValueError: Namespace GstRtspServer not available" 오류가 발생하였습니다. nvidia@nvidia-OrinNX16G:/opt/nvidia/deepstream/deepstream/sources/deepstream_python_apps/apps/deepstream-test1-rtsp-out$ python deepstream_test1_rtsp_out.py Traceback (most recent call last): File "deepstream_test1_rtsp_out.py", line 26, in gi.require_version('GstRtsp..

728x90