python 10

exception 발생할 때 stacktrace를 로그에 남기기

일반 로그 뿐만 아니라 코드에서 exception이 발생할 때에도 로그를 남기고 싶을 때가 있다. 그럴 경우에는 아래 코드와 같이 남기면 된다. import os import sys import logging import traceback from logging.handlers import SysLogHandler from constants import LOG_LEVEL logger = logging.getLogger() logger.setLevel(LOG_LEVEL) syslog = SysLogHandler(address=(HOST, PORT)) hostname = os.environ.get('HOSTNAME', "") log_format = hostname + " %(levelname)-8s [%(f..

python 2023.07.16

전문가를 위한 파이썬 책 구매

요즘 업무에 계속 파이썬을 사용하고 있습니다. 최대한 좋은 파이썬 코드를 짜보고자 노력하고 있지만, 지식의 한계로 인하여 정체되는 느낌이었습니다. 그래서 좋은 레퍼런스를 참고하고자 책이나 강의 등 여러 자료를 찾아보았지만 마음에 드는 자료가 없었습니다. 그러다 오렐리 출판사에서 발간하고 한빛미디어에서 번역한 '전문가를 위한 파이썬' 책을 찾았습니다. 꽤나 고급 파이썬 테크닉을 다루는 것을 보고 e-북을 구매하였고 계속 공부하고자 합니다. 책의 표지는 아래와 같이 도마뱀이 그려져 있는 내용입니다. 아마 이제 당분간 파이썬 포스팅은 이 책을 보고 리뷰하는 내용일 것 같습니다.

python 2022.07.21

파이썬 동시성 프로그래밍 개요

이전에는 파이썬 웹 프레임워크로 Django 혹은 Flask가 주로 사용되었다. 하지만 두 프레임워크는 생산성이 높다는 장점이 있으나, 속도가 느리다는 단점이 있다. 따라서 국내에서는 파이썬 기반의 웹개발이 비교적 많지 않은 상태였다. 그러나, 속도 문제를 해결하면서도 생산성은 높인 Python 기반의 웹프레임워크인 FastAPI가 탄생하였고, 이벤트 기반 비동기 방식으로 인하여 속도 문제를 해결해주었다. 한 벤치마크에서는 FastAPI가 Node.js, Go와 비슷하거나 더 높은 성능을 보인다고 발표한 바가 있다. 따라서 FastAPI에 대해 공부해보기로 하였다. 위에서 언급했던 것과 같이 FastAPI는 비동기 방식으로 진행되므로 FastAPI를 먼저 공부하는 것보다 Python 기반의 동시성 프로그..

django ORM을 사용해서 MySQL에 get, post

코드를 작성하다보면 항상 같은 명령어를 찾아보는 것 같아서, 미리 블로그에 포스팅하면 굳이 찾아보는 수고를 하지 않을 것 같다. 1. MySQL DB 생성 CREATE DATABASE 데이터베이스명 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; SHOW DATABASES; USE 데이터베이스명; 2. 장고 앱 생성 django-admin startapp 앱이름 3.앱 디렉토리에 위치한 models.py 수정 from django.db import models class User(models.Model): username = models.CharField(max_length=45) password = models.CharField(max_length=256) em..

python/django 2021.12.16

django 환경설정하기

1. django-admin을 사용하여 프로젝트 생성 $ django-admin startproject 프로젝트이름 2. settings.py settings.py에 있는 정보를 SECRET_KEY, DATABASES 정보를 다른 파이썬 파일로 만들어야 한다. 이번 프로젝트의 경우에는 my_settings.py라는 파이썬 파일을 생성하여 SECRET_KEY와 DB정보를 옮겨두었다. # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = '시크릿 키' # Database # https://docs.djangoproject.com/en/3.2/ref/settings/#databases DATABASES = { 'defau..

python/django 2021.12.16

파이썬 기반의 멀티프로세싱

이전 포스트(https://kimjy-par.tistory.com/12)에서는 일반적으로 통용되는 멀티스레딩과 멀티프로세싱의 특징을 비교하였다. 본인은 C나 Fortran 언어를 사용하여 병렬처리를 수행한 경험이 있으며, 이 때에는 openMP와 MPI 라이브러리를 사용하였었다. 따라서 처음 파이썬 기반 병렬처리를 공부할 때는 threading은 openMP에, multiprocessing은 MPI 라이브러리에 대응되는 개념이라고 접근하여 코드를 작성하였지만 크나큰 오산이었다. 이전에 멀티스레딩에 대해 포스팅하였던 것 처럼, 파이썬에서 스레딩 모듈을 사용하여 멀티스레딩을 사용한다고 하더라도 하나의 인터프리터는 하나의 프로세서 자원밖에 사용하지 못한다! 따라서 compute-intensive한 프로그램에서..

python 2021.12.15

closure & decorator

처음에 closure와 decorator의 개념을 듣고는 잘 이해가 가지 않았다. 따라서 이번 포스트를 통하여 closure(추후 decorator)의 개념을 정리하고자 한다. closure 기본적으로 파이썬은 function 안에 function이 호출되는 nested function이 가능하다고 한다. 많은 블로그들에서 pow함수를 예로 들어서 사용하였고, 아마 사용할 수 있는 예제 중에 간단한 예제이기 때문에 먼저 pow 함수를 예제로 사용하고자 한다. 먼저 우리는 pow 연산을 아래와 같이 수행할 수 있다. result=5**3 혹은 아래와 같이 함수로 계산할 수도 있을 것이다. def calc_pow3(x): return x**3 print(calc_pow(5)) >>> 125 물론 calc_p..

python 2021.12.15

병렬처리 특성 비교, 그리고 파이썬 기반의 멀티쓰레딩

항상 파이썬을 데이터 후처리 및 가시화 용도로만 사용해서 인지, 파이썬을 사용한 병렬처리 방법은 사용한 경험이 없다. 하지만 이번에 파이썬을 처음부터 다시 공부하기로 마음먹었으므로 파이썬에서 사용할 수 있는 병렬처리방법에 대해 정리하고자 한다. 들어가기에 앞서 쓰레드 기반의 병렬처리 방법과 프로세스 기반의 병렬처리 방법에 대해 논하고자 한다. 일반적으로 쓰레드는 프로세스를 구성하고 있는 가장 작은 단위이다. 또한 하나의 프로세스 내부의 쓰레드들 간에는 메모리가 공유되며, 따라서 모든 쓰레드는 프로세스의 메모리 공간을 참조(읽기/쓰기)가 가능하다. 이러한 특성을 바탕으로 쓰레드 기반의 병렬처리는 SMP(shared memory parallelism)이라고 부른다. 따라서 개발자는 쓰레드 기반의 병렬처리를 ..

python 2021.12.06

PEP 8 - 파이썬 코드 스타일 가이드

파이썬 코드를 작성하다 보면, 아래와 같이 함수 이름을 고민할 경우가 있다. 또 들여쓰기를 할 때 tab을 사용할 것인지, 혹은 스페이스를 4번 사용할 것인 지를 고민하는 경우가 있다. 이러한 경우를 위해 파이썬 공식 홈페이지에서는 PEP8이라는 파이썬 코드 스타일 가이드를 제공하고 있다. 본 포스트는 파이썬 코드 스타일 가이드를 정리하여, 추후 코드 작성에서 올바른 스타일로 코드를 작성하고자 한다. #변수 명의 다양한 스타일 var_name varName VarName varname 들여쓰기 들여쓰기는 4개의 스페이스를 사용할 것 첫번째 줄에 인자가 있으면 괄호에 맞추어 수직정렬을 할 것 첫번째 줄에 인자가 없으면 추가로 들여쓰기를 하여 아랫줄과 구분할 것 [옳은 예] #괄호에 맞춰서 정렬을 하는 경우..

python 2021.12.06

python 기초 문법 및 여러가지 알아두면 좋을 것들

사실 수치계산/데이터분석을 위해 파이썬을 계속사용하여 왔다. 하지만 아직 컴파일러 언어에 익숙한 까닭으로 인해 파이썬을 파이써닉하게 사용하지 않았다. 또 주로 배열과 리스트를 많이 사용하였고 딕셔너리나 튜플자료형을 사용하지 않았던 것 같다. 따라서 다시 파이썬을 기초부터 공부하기로 하고, 기초 문법 및 여러가지 알아두면 좋을 것들을 정리하고자 한다. 또 평소에 사용하면서 공부했으면 좋겠다고 생각한 것들 역시 정리하고자 한다. 변수 및 자료형 a=100 b=a print(id(a), id(b)) >>> 9792160 9792160 이와 같이 a와 b의 메모리 주소는 동일하다. 다만, 다음에 b에 다른 값을 덮어씌우면 b의 값과 메모리 주소는 변경될 것이다. 이번에는 리스트를 예로 들면 좋을 것 같다. a=..

python 2021.12.06