상세 컨텐츠

본문 제목

221230 알고리즘, 멀티스레드, test코드

카테고리 없음

by hunss 2022. 12. 30. 20:31

본문

최종프로젝트를 하면서 이메일 인증을 한 사실은 많이 언급했다.

근데 사용자가 로그인을 했을 때 이메일이 전송되는데 3초정도 로딩시간이 필요했는데, 그 동안 이상함을 못느꼈었다.

다른 팀의 최종발표를 듣는데, 같은 이메일 인증을 시도했는데 멀티스레드를 이용해 이메일 전송속도를 빠르게 개선한 것을 볼 수 있었다. 그래서? 오늘 멀티스레드에 대해 찾아봤다.

 

파이썬에서 멀티스레드를 구현하는 방법에는 threading모듈 or thread모듈을 사용하는 두가지 방법이 있다고 한다.

근데 thread모듈은 deprecated되서 threading모듈을 사용하는 것을 권장하는 상태.

target은 쓰레드가 실행할 함수, args는 그 함수의 인자들을 의미함. 

이런게 예시인데, 아직 저 인자에 뭘 넣어야할 지 감을 못잡아서 적용은 못했다.

근데 Gobal Interpreter Lock 이라고 파이썬에서는 하나의 프로세서 안에 모든 자원의 락을 글로벌하게 관리해서 한번에 하나의 쓰레드만 자원을 컨트롤해서 동작한다고 한다.

 

그래서 multiprocessing 모듈이라고 쓰레드 대신 프로세스를 만들어 병렬로 동작하는 것.

 

thread vs process

process는 각자가 고유한 메모리 영역을 가지기 때문에 쓰레드에 비하면 메모리 사용이 증가한다. result로 Queue객체를 사용할 뿐

process는 더 많은 메모리가 필요하지만, 각각 프로세스에서 병렬로 cpu작업을 할 수 있고 이를 이용해 여러 머신에서 동작하는 분산 처리 프로그래밍도 구현할 수 있는 것.

thread는 가볍지만 GIL때문에 계산 처리를 하는 작업은 한번에 하나의 쓰레드에서만 작동하여 CPU작업이 적고 I/O작업이 많은 병렬 처리 프로그램에서 효과적이다.


최종프로그램의 Test코드를 작성중이다.

예시인데, 간단한 회원가입 성공할 때의 test코드이다. user_data를 작성하고 response.status_code랑 201이랑 비교함.

코드가 201이면 test코드 success / 201이 아니면 failed이 뜬다.

 

아직 회원가입 쪽만 했는데, 다 적으려면 한참 걸릴거같다.


토끼반에 합류했다. 코딩테스트를 대비해서 알고리즘 공부를 시작했다.

알고리즘 풀 때 중요한건 문제 보자마자 쫄지말고 문제의 Flow를 생각하는 것이다. 생각을 쪼갠다.

1. 이렇게 이렇게해야겠다.

2. 그 다음은 이렇게 이렇게 해야겠다. 이런식으로

 

오늘은 완전탐색

- 거의 무조건 나오는 유형으로 가능한 모든 경우의 수를 탐색하는 방법

Brute-Force search : 모든 경우의 수

비트마스크 : 경우의 수를 이진수로 표현

재귀함수 : 자기가 자신을 호출, 종료조건이 꼭 필수적임

순열 : from itertools import permutations / 조합 : from itertools import combinations

BFS : 너비탐색 / DFS : 깊이탐색 -> 표준적인 가이드 코드가 있으니까 인지해야함

백트래킹 : 모든 경우의 수 중에 특정한 조건을 만족하는 것만 살핌.


내일 할 일

11시 이력서 특강

이후

이력서 작성