profile
성장을 도울 아카이빙 블로그

asyncio_이벤트_루프

문제점출력 파일 핸들에 대한 open, close, write 호출이 주 이벤트 루프에서 이뤄진다.운영체제의 시스템 콜을 사용하므로 이벤트 루프를 상당히 오랫동안 블록할 수 있다.동시성이 아주 높은 서버에서는 응답 시간이 늘어날 수 있다.시스템 콜(블로킹 I/O와 스레

약 18시간 전
·
0개의 댓글
·

스레드와_코루틴을_함께_사용

TDD를 가능하게 하려면, 코드베이스에서 블로킹 I/O에스레드를 사용하는 부분과 비동기 I/O에 코루틴을 사용하는 부분이 서로 호환되고 공존해야한다.스래드 기반 구현으로부터 점진적으로 asyncio 와 코루틴 기반을 바꾸기main 진입점처럼 코드베이스에서 가장 높은 구

1일 전
·
0개의 댓글
·

순차탐색

탐색은 여러 데이터 중에서 원하는 데이터를 찾아내는 것을 의미데이터가 담겨있는 리스트를 앞에서부터 하나씩 비교해서 원하는 데이터를 찾는 방법임의 리스트가 다음과 같이 rand_data_list로 있을 때, 원하는 데이터의 위치를 리턴하는 순차탐색 알고리즘 작성해보기가장

2일 전
·
0개의 댓글
·

백트랙킹

백트래킹 (backtracking) 또는 퇴각 검색 (backtrack)으로 부름제약 조건 만족 문제 (Constraint Satisfaction Problem) 에서 해를 찾기 위한 전략해를 찾기 위해, 후보군에 제약 조건을 점진적으로 체크하다가, 해당 후보군이 제약

4일 전
·
0개의 댓글
·
post-thumbnail

탐욕_알고리즘의_이해

Greedy algorithm 또는 탐욕 알고리즘 이라고 불리움최적의 해에 가까운 값을 구하기 위해 사용됨여러 경우 중 하나를 결정해야할 때마다, 매순간 최적이라고 생각되는 경우를 선택하는 방식으로 진행해서, 최종적인 값을 구하는 방식지불해야 하는 값이 4720원 일

5일 전
·
0개의 댓글
·
post-thumbnail

링크드_리스트

연결 리스트라고도 함배열은 순차적으로 연결된 공간에 데이터를 나열하는 데이터 구조링크드 리스트는 떨어진 곳에 존재하는 데이터를 화살표로 연결해서 관리하는 데이터 구조본래 C언어에서는 주요한 데이터 구조이지만, 파이썬은 리스트 타입이 링크드 리스트의 기능을 모두 지원링크

6일 전
·
0개의 댓글
·

I/O를 할 때는 코루틴을 사용해 동시성을 높여라

요구사항마다 팬아웃 팬인을 하면 안된다.!!!!해결: 코루틴을 사용한다.동시성을 활용하는 함수 사용async와 await 키워드를 사용하여 구현제너레이터 실행을 위한 인프라 구축코루틴 시작 비용은 함수 호출해결 후 async함수로부터 실행 재개step_cell을 호출해

2022년 8월 4일
·
0개의 댓글
·

동시성과 Queue를 사용하기 위해 코드를 어떻게 리팩토링해야 하는지 이해하라

queue 내장 모듈의 Queue 클래스를 사용해서 파이프라인을 스레드로 실행하게 구현아래와 같은 문제 해결Simulate_thread 함수의 방식보다 simulate pipeline함수가 더 따라가기 어렵다코드의 가독성을 개선하려면 ClosableQueue와 Stop

2022년 8월 2일
·
0개의 댓글
·

요구에 따라 팬아웃을 진행하려면 새로운 스레드를 생성하지 말라

파이썬에서 병렬 I/O를 실행하고 싶을때, 자연스럽게 스레드 사용을 고려하지만 팬아웃을 수행하고자 할 때 스레드를 사용할 경우 큰 단점을 마주하게된다.Thread 인스턴스를 서로 안전하게 조율하려면 특별한 도구가 필요하다스레드는 메모리를 많이 사용하며, 스레드 하나당

2022년 8월 1일
·
0개의 댓글
·

병합 정렬 (merge sort)

재귀용법을 활용한 정렬 알고리즘리스트를 절반으로 잘라 비슷한 크기의 두 부분 리스트로 나눈다.각 부분 리스트를 재귀적으로 합병 정렬을 이용해 정렬한다.두 부분 리스트를 다시 하나의 정렬된 리스트로 합병한다.직접 눈으로 보면 더 이해가 쉽다: https://vi

2022년 7월 30일
·
0개의 댓글
·

동시성

프로그램의 영역이 커질수록 복잡도가 증가하게 되는데, 이때 프로그래머는 프로그램의 명확성, 테스트 가능성, 효율성을 유지하면서 늘어나는 요구를 만족시켜야 한다. 그 중에서, 가장 어려운 것은 단일 스레드 프로그램을 동시 실행되는 여러 흐름으로 이뤄진 프로그램 바꾸기프로

2022년 7월 29일
·
0개의 댓글
·

Queue를_사용해서_스레드_사이의_작업_조율하라

Queue 사용 X모든 작업이 다 끝났는지 검사를 하기 위해서 추가로 done_queue에 대해 바쁜 대기(busy waiting)를 수행run메서드가 루프를 무한히 반복작업자 스레드에게 루프를 중단할 시점을 알려줄 방도가 없다.파이프라인 진행이 막힐 경우 프로그램이

2022년 7월 28일
·
0개의 댓글
·
post-thumbnail

줄을 서는 행위와 유사가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조음식점에서 가장 먼저 줄을 선 사람이 제일 먼저 음식점에 입장하는 것과 동일FIFO(First-In, First-Out) 또는 LILO(Last-In, Last-Out) 방식으로 스택과 꺼내는

2022년 7월 27일
·
0개의 댓글
·

스레드에서 데이터 경합을 피하기 위해서 Lock를 사용하라

GIL은 동시 접근을 보장해줄 순 있어도 보호는 하지 못하므로 프로그램의 상태가 오염될 수 있으니 주의해야한다.파이썬에는 GIL이 있지만, 파이썬 프로그램 코드는 여전히 여러 스레드 사이에서 일어나는 데이터 경합으로부터 자신을 보호해야 한다.코드에서 여러 스레드가 상호

2022년 7월 26일
·
0개의 댓글
·

블로킹 I/O의 경우 스레드를 사용하고 병렬성을 피하라

신기하게도, CPU가 많아도 스레드를 사용하면 속도가 느려지기도 한다. 왜냐하면, 표준 CPython 인터프리터에서 프로그램을 사용할 때 GIL(락 충돌과 스케줄링 부가비용)이 미치는 영향을 보여준다.위와 같은 문제가 있어도 파이썬이 스레드를 지원하는 이유다중 스레드를

2022년 7월 25일
·
0개의 댓글
·

대표적인 데이터 구조4: 큐 (Queue)1\. 큐 구조줄을 서는 행위와 유사가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조음식점에서 가장 먼저 줄을 선 사람이 제일 먼저 음식점에 입장하는 것과 동일FIFO(First-In, First-Out) 또는 LILO(L

2022년 7월 24일
·
0개의 댓글
·

자식 프로세스를 관리하기 위해서 subprocess 사용

동시성컴퓨터가 같은 시간에 여러 다른 작업을 처리하는 것처럼 보이게 하는 것CPU 코어가 하나일지라도 여러 프로그램이 번갈아가면서 실행되면 동시에 수행하는 것 같은 착각을 부른다.어떤 특정 유형의 문제를 해결하기 위한 도구여러 다양한 실행 경로나 다양한 I/O 흐름을

2022년 7월 21일
·
0개의 댓글
·

합성_가능한_클래스_확장

메타클래스를 사용하면 클래스 생성을 다양한 방법으로 커스텀화할 수 있지만, 여전히 메타클래스로 처리할 수 없는 경우가 있다.new((<class 'main.TraceDict'>, ('안녕', 1)), {}) ->{}getitem(({'안녕': 1, '거기': 2}

2022년 7월 20일
·
0개의 댓글
·

클래스 애트리뷰트를 표시하라

메타클래스 기능클래스가 정의된 후 클래스가 실제로 사용 전 프로퍼티 변경 혹시 표시디스크립터 활용애트리뷰트가 포함된 클래스 내부 깊이 살피기set_name 특별 메서드 활용버전: 파이썬 3.6이상메타클래스를 사용하면 어떤 클래스가 완전히 정의되기 전에 클래스의 애트리뷰

2022년 7월 19일
·
0개의 댓글
·

백준_동적계획법

실전 코딩 테스트 - 동적 계획법 하나하나 해보기

2022년 7월 18일
·
0개의 댓글
·