Python12 Python 클린코드 하루가 멀다하고 기초를 더 다져야겠다고 생각하면서도 느슨해진게 없지않아 있었다. Python 코드 품질에 대해 더 심층있고 공부하고 정리하고 싶어 정리하였다. 아래 링크를 타고 들어가보자 https://everytown.co.kr/index.html https://everytown.co.kr/index.html License This document is licensed under a creative-commons NC license, so you can use the text freely for non-commercial purposes and adapt it to your needs. The only thing we ask in return is the inclusion of a link to thi.. 2023. 12. 14. Python GIL (Global Interpreter Lock)에 대해 알아보자 저번에 학습한 이론대로라면 Thread 2개를 만들어서 실행하면 아래와 같은 그림으로 동작된다고 생각할 수 밖에 없다. (참조 : https://yscho03.tistory.com/293) 하지만 파이썬은 아래와 같이 동작하지 않는다. 파이썬에는 GIL(Global Interpreter Lock) 이 있기때문에 스레드에서 한 번에 하나의 스레드만 Python 바이트코드를 실행한다. GIL(Global Interpreter Lock) GIL(Global Interpreter Lock)은 CPython 인터프리터(파이썬의 표준 구현체)에서 사용되는 개념이다. GIL은 파이썬 스레드에서 한 번에 하나의 스레드만 Python 바이트코드를 실행하도록 제한하는 메커니즘이다. GIL은 파이썬이 C 언어로 작성된 확장.. 2023. 7. 11. 스레드 풀 (Thread Pool) Thread Per Request 모델 Thread Per Request 모델은 웹 서버에서 요청이 들어올 때마다 새로운 스레드를 생성하여 해당 요청을 처리하는 방식이다. 각 요청은 독립적으로 실행되기 때문에 동시에 여러 요청을 처리할 수 있다. 간단한 구현 각 요청에 대해 새로운 스레드를 생성하기 때문에 구현이 비교적 간단하다. 스레드는 일반적으로 운영체제에서 제공하는 기능을 사용하여 생성 및 관리할 수 있다. 동시성 Thread Per Request 모델은 여러 스레드를 통해 동시에 요청을 처리할 수 있으므로 동시성을 지원한다. 이는 대규모 트래픽을 처리하는 데 유용할 수 있다. 이렇게 계속 요청 들어올때마다 스레드를 생성하게 된다면? 컨텍스트 스위칭 오버헤드 스레드는 자원을 공유하면서 실행되기 때문.. 2023. 7. 11. python 파일 용량이 큰 파일을 읽을 경우 from functools import partial def chunked_file(fp, block_size=1024 * 1024 * 50): # 50MB return [chunk for chunk in iter(partial(fp.read, block_size), '')] def read_file(file_path): with open(file_path) as f_read: return chunked_file(f_read) # 사용방법 file_path = "/data/large_file.txt" for content in read_file(file_path): someting(content) 2022. 9. 1. 백 트래킹 기법 1. 백 트래킹 기법 백트래킹 (backtracking) 또는 퇴각 검색 (backtrack)으로 부름 제약 조건 만족 문제 (Constraint Satisfaction Problem) 에서 해를 찾기 위한 전략 해를 찾기 위해, 후보군에 제약 조건을 점진적으로 체크하다가, 해당 후보군이 제약 조건을 만족할 수 없다고 판단되는 즉시 backtrack (다시는 이 후보군을 체크하지 않을 것을 표기)하고, 바로 다른 후보군으로 넘어가며, 결국 최적의 해를 찾는 방법이다. 실제 구현시, 고려할 수 있는 모든 경우의 수 (후보군)를 상태공간트리(State Space Tree)를 통해 표현 각 후보군을 DFS 방식으로 확인 상태 공간 트리를 탐색하면서, 제약이 맞지 않으면 해의 후보가 될만한 곳으로 바로 넘어가서.. 2022. 8. 11. [알고리즘] algosopt - 여행 짐 싸기 (동적계획법) 여행 짐 싸기 문제 정보 시간 제한 메모리 제한 2000ms 65536kb 문제 여행을 떠나기 전날까지 절대 짐을 싸지 않는 버릇이 있는 재훈이는 오늘도 비행기 타기 전날에야 가방을 싸기 위해 자리에 앉았습니다. 비행기 규정상 재훈이는 캐리어를 하나만 가지고 갈 수 있는데, 아무래도 가져가고 싶은 물건들이 캐리어 안에 다 들어가지 않을 것 같습니다. 재훈이는 가져가고 싶은 각 물건들의 부피와 얼마나 필요한지를 나타내는 절박도를 조사해 다음과 같은 목록을 만들었습니다. 물건 노트북 컴퓨터 카메라 XBOX365 커피그라인더 아령 백과사전 부피 4 2 6 4 2 10 절박도 7 10 6 7 5 4 캐리어의 용량이 정해져 있기 때문에 가져갈 수 있는 물건들의 부피 합은 캐리어의 용량 w 이하여야 합니다. 이때 .. 2022. 4. 1. Google API - 대량으로 구글 번역 API 활용해보기 문제점 번역할 텍스트가 적다면 오래 걸리진 않겠지만 번역할 텍스트 리스트가 많다면 아래와 같이 반복문을 활용하여 호출 시 굉장히 오래 걸려서 만족한 응답시간을 기대할 수 없을 것이다. 이유는 반복적으로 호출 시 내부적으로는 구글 API를 여러 번 호출하기 때문에 굉장히 오래 걸린다. 웹으로 서비스한다고 생각하면 타임아웃이 걸리거나 오래 걸려서 고객이 이탈할 수도 있다. from googletrans import Translator target_texts = ['안녕하세요', '밥 먹었습니까?'] translator = Translator() translated_texts = [] for target_text in target_texts: translated_texts.append(translator.tr.. 2022. 3. 14. Google API - python을 활용한 구글 번역 API를 사용해보자 Googletrans란? 주의점 공식 Google 번역 API를 사용하지 않고 우회하여 translate.google.com 를 호출하여 사용하기 때문에 비정상적인 호출에 대하여 API가 구글에 의해서 Ban이 당할 수 있으나 빠르게 구현하여 사용할 수 있다는 것이다. ※ 실제 서비스 구축에 대해서는 안정성있는 공식 API를 사용해야한다. 라이센스 및 제한 Googletrans는 Google 번역 API를 구현한 무료 무제한 파이썬 라이브러리이다. 이것은 Google 번역 Ajax API를 사용하여 감지 및 번역과 같은 메소드를 호출한다. 특징 빠르고 안정적이다. translate.google.com에서 사용하는 것과 동일한 서버를 사용한다. 자동 언어 감지 대량 번역 맞춤형 서비스 URL 연결 풀링(r.. 2022. 3. 4. python - 힙 큐 (heapq) 정의 힙은 모든 부모 노드가 자식보다 작거나 같은 값을 갖는 이진 트리입니다. 이 구현에서는 모든 k에 대해 heap[k] 2020. 12. 22. python - functools functools.reduce( function , iterable [ , initializer ] ) 이터레이터를 왼쪽에서 오른쪽에서 순차적으로 누적하여 적용할때 사용합니다. 예를 들어 x는 누적된 값이고 y는 업데이트 되는 값입니다. from functools import reduce reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) # result ((((1+2)+3)+4)+5) = 15 functools.cmp_to_keyfunctools.cmp_to_key( func ) 비교 함수를 주요 함수로 사용합니다. 비교 함수는 두 개의 인수를 받아 비교하고, 보다 작으면 음수, 같으면 0,보다 크면 양수를 반환하여 사용합니다. from functools import cmp_to.. 2020. 12. 18. python - startswith, endswith startswith 접두어 부분 매칭 여부를 판단할때 매우 유용하다 str = 'Hello world!' print( str.startswith( 'Hello' ) ) # True print( str.startswith( 'He' ) ) # True str = 'Hello world!' print( str.startswith( 'll' ) ) # False print( str.startswith( 'll', 2 ) ) # True str = 'Hello world!' print( str.startswith( 'Hell', 0, 3 ) ) # False print( str.startswith( 'Hell', 0, 4 ) ) # True endswith 접미어 부분 매칭 여부를 판단할때 매우 유용하다 pri.. 2020. 12. 18. python - Counter 정의 Counter 는 dict 해시 가능한 개체를 계산하기 위한 하위 클래스입니다. 요소가 사전 키로 저장되고 개수가 사전 값으로 저장되는 컬렉션입니다. __init__ : 생성 빈 객체로 생성 string 인자로 생성 dict 인자로 생성 keyword argument 인자로 생성 # 빈 객체로 생성 c = Counter() # string 인자로 생성 c = Counter('gallahad') # dict 인자로 생성 c = Counter({'red': 4, 'blue': 2}) # keyword argument로 생성 c = Counter(cats=4, dogs=8) # result Counter() Counter({'a': 3, 'l': 2, 'g': 1, 'h': 1, 'd': 1}) Coun.. 2020. 12. 17. 이전 1 다음 728x90 반응형