본문 바로가기
반응형

python9

Django 에서 GROUP_CONCAT 커스텀 사용 시 order_by, separator 추가하기 class CustomConcat(Aggregate): function = 'GROUP_CONCAT' allow_distinct = True def __init__(self, expression, distinct=False, **extra): # order by = group_concat 의 정렬 기준 # separator = group_concat 의 구분자(default = ",") expr_separator = '' expr_order_by = '' order_by = extra.get('order_by') separator = extra.get('separator') if order_by: expr_order_by = f' ORDER BY {order_by} ' if separator: expr_.. 2024. 2. 27.
Python 이중 for loop 를 itertools 를 활용하여 개선하기 a = [1,2,3,4] b = ['A', 'B'] 의 두 리스트에 대해 (1,A), (1,B), (2,A), (2,B), ... 반복을 하려면 무지성으로 구현했을 때 for x in a: for y in b: function(x, y) 처럼 구현할 수 있다. 하지만 itertools 의 product 를 활용하면 좀 더 깔끔하게 구현이 가능하다 [function(x, y) for x, y in product(a, b)] 2024. 2. 26.
Gunicorn 에서 print() output 이 로깅 되지 않을 때 해결법 # myapp.service StandardOutput=journal StandardError=journal 을 추가하면 print() 문구가 노출된다 2023. 11. 22.
gunicorn 멀티프로세스 Crontab 을 활용한 날짜별 file log 로테이션 돌리기 gunicorn 을 활용하여 멀티프로세스를 이용하는 경우, 그리고 로깅 타입을 TimedRotatingFileHandler 을 이용하는 경우 여러 개의 프로세스가 한 파일에 접근하기 때문에 날짜가 바뀔 때마다 새 파일을 만들어야 하는데 이게 제대로 작동하지 않았다 그래서 메인 log 파일에 계속 누적하여 로그가 쌓이고 있었고, 얼마 지나지 않아 로그 사이즈가 너무 커져서 나중에는 읽기 조차 힘든 지경에 이르렀다. 여러 자료들을 살펴 보았을 때 멀티 프로세스를 쓴다면 곧바로 파일 로테이션 로깅을 사용하지 말고, 작업 큐에게 로그를 전달하여 작업 큐로부터 파일 로테이션을 돌리도록 해주면 된다고 하는데 그냥 가장 간단한 방법으로 처리하면 되지 않을까 하여 크론탭을 이용하게 됐다 크론탭은 정해진 시간, 날짜에 .. 2023. 4. 25.
Multi Thread 결과 값 리턴하여 저장하기 Thread는 보통 현재 메인 Thread 에서 시간을 더 이상 잡아먹지 않기 위해 비동기적으로 작업을 넘겨버리고 주 작업을 하고 싶을 때 사용한다. 따라서 이런 경우는 그렇게 생성한 Thread의 결과가 어떤지 살펴볼 필요가 없을 때이다. 예를 들어, 고객 주문 처리 함수를 구현한다고 가정하면, 고객 주문을 완료 하고 마지막에 고객에게 알림 메시지를 발송하는 기능을 구현한다고 하자. 고객에게 알림 메시지를 발송하기 위해 타 업체의 API를 이용해야 하는데, 만약 타 업체 서버가 점검 중이어서 타임아웃 30초 동안 리스폰스를 받지 못한다면 해당 주문 처리 함수는 30초 동안 진행이 되지 않는다. 따라서 이런 경우에 알림의 성공 유무와 관계 없이 일단 주문처리를 완료하고 싶을 때 Thread를 이용할 수 .. 2021. 7. 22.
베트남어 성조 제거하여 알파벳으로 변환하기 회사에서 다국어를 지원하다보니 베트남어 인풋을 받아 처리를 해야 하는 문제가 생겼다. 고객이 베트남인일 때 알파벳을 입력하는 것은 어려워하지만 베트남어 키보드로 이름을 치는 건 쉽게 할 수 있는데, 문제는 우리가 베트남어를 받아서 영문 알파벳으로 변환을 하여 협력사에 알파벳 이름을 전달해야 한다. 예를 들어, 한 고객의 이름이 Nguyễn Vũ Quốc Anh 이라고 했을 때, 이 이름을 Nguyen Vu Quoc Anh 으로 변환해야 한다. 문제 해결을 위해 베트남어에 사용되는 전체 문자열을 나열하고, 그에 대응하는 알파벳으로 치환해주는 간단한 함수를 구현한다. def remove_accents(input): if not input: return "" s1 = u'ÀÁÂÃÈÉÊÌÍÒÓÔÕÙÚÝàáâãè.. 2021. 6. 30.
반응형