SlideShare a Scribd company logo
1 of 26
멀티 프로세스를 이용한 테스트.
(Multiprocessing를 통한 테스트 소요시간 단축)
2019.03.27
데이터 비즈 파트
안상준
멀티 프로세스를 이용한 테스트.
(Multiprocessing를 통한 테스트 소요시간 단축)
2019.03.27
데이터 비즈 파트
안상준
Multiprocessing…
• 다중 처리(多重處理)는 컴퓨터 시스템 한 대에 둘 이상의 중앙
처리 장치(CPU)를 이용하여 병렬로 처리하는 것을 가리킨다.
또, 이 용어는 하나 이상의 프로세서를 지원하는
시스템의 능력, 또는 이들 사이의 태스크를 할당하는 능력을
가리키기도 한다.[1] 다중 처리 시스템(Multiprocessing System)은
다중 처리가 적용된 시스템을 뜻한다.
https://ko.wikipedia.org/wiki/%EC%9E%90%EB
%8F%99%ED%99%94
Time = Money
시간은 돈입니다.
우리의 Working Time은 소중하니까요.
Chat-bot의 똑똑함 = TC의 Accuracy
즉, 매일 매일 Chat-bot이 얼마나
어제 보다 똑똑해 졌는지가 화두죠.
Accuracy의 증가는
더욱 더 똑똑해진 Chat-bot을 의미 합니다.
개선Code 혹은 Logic을 확인 하려면,
테스트를 돌려서 결과를 확인해야 합니다.
헌데, 테스트 해야 되는 문장이 많지 않나요?
일반 TC는 대충 1만 문장,
Precision Test는 3만 5천 Rule 키워드를
테스트 합니다.
그럼, 테스트 결과는 얼마나 기다려야 되죠?
문장 Test = 약 6 시간
Precision Test = 약 13시간
총 약 19시간이 소모 됩니다.
문장 TC만 해도 Working Time 안에 확인 가능 한가요?
오후에 테스트를 돌리게 되면 다음날
확인해야 되는 불상사가 생기게 되죠.
TC결과 확인이 늦으면, 그럼 다음 수정도 늦어 지겠네요?
네, 맞습니다. 그래서 다들
“테스트 얼마 남았어?”
“테스트 결과 언제 쯤 나올 것 같아요?”
라는 질문을 반복하죠.
앞으로도 이런 일은 반복 됩니다….
테스트 수행시간이 너무 많이 드네요..
작업에 Pain point가 어딘가요?
네트워크(DF, IC Request), 디스크(Excel Read and Write) – I/O 작업.
라이브러리 참조(NLTK, SPACY), Logic수행(keyword 검출) – CPU 작업.
그럼, 어떻게 테스트 시간을 줄일 수 있나요?
시간이 갈수록 문장 개수는 많아지고
TC시간은 점점 늘어날 텐데…
우린 새로운 방법은 찾아야 했습니다 !!
Python Multiprocessing
Single로 돌아가는 TC를 나눠 병렬로 처리하자 !!
(고통 분담)
https://docs.python.org/ko/3/library/multiprocessing.html
헌데, 제가 알기론 Python은
Single Thread라고 한 것 같은데?
어떻게 병렬 처리를 하죠?
Multiprocessing Package는 병렬성과 동시성을 제공하며,
일반적인 Thread 대신에 서브 프로세스를 사용하여
Global Interpreter Lock을 효과적으로 회피 합니다.
병렬성과 동시성은 같은 말 아닌가요?
병렬성 != 동시성
병렬성은 -> I/O (Network)에 대한 고민
동시성은 -> CPU Boundary에 대한 고민
Multiprocessing은 어떤 종류들이 있나요?
크게 Async and Sync로 나뉘게 됩니다.
http://blog.naver.com/PostView.nhn?blogId=parkjy76&logNo=221089918474&categoryNo
=48&parentCategoryNo=0&viewDate=&currentPage=1&postListTopCurrentPage=1&from=postView
Async랑 Sync 많이 들어 보긴 했는데,
솔직히 어떤 차이죠?
Block && None Block의 차이
결과 값을 기다려주나요? 아닌가요?
Map, Apply는 어떻게 다른 거죠?
Map은 호출 인자로 Iterable 한 것만 넣을 수 있고.
Apply는 개별 args 를 넣을 수 있는 형태로 되어 있습니다.
그럼, 이 패키지는 어떻게 사용했던 건가요?
그래서, 얼마나 빨라 졌는데요?
이전 테스트 시간 6시간에서
대략 4분에 1정도의 시간으로 줄었음.
4999초 → 1시간 23분
그럼 혹시. 코드 재활용도 가능한가요?
저는 다른 테스트도 이렇게 돌리고 싶은데?
해당 코드를 재활용하여
(기존 테스트 Dependency를 제거 후)
Precision Test 테스트도 재활용하여
Multi-Test로 사용하고 있습니다.
결론은요? :(
이런 방법도 있으니 다른 프로젝트에서도
테스트에 시간을 많이 허비하고 있거나
수행하는 Logic에 Burden이 있으시면
Multiprocessing을 추천 드립니다 :)
감사합니다.
https://www.pinterest.co.kr/

More Related Content

What's hot

PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보
PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보
PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보Young Hoo Kim
 
파이썬과 커뮤니티와 한국어 오픈데이터
파이썬과 커뮤니티와 한국어 오픈데이터파이썬과 커뮤니티와 한국어 오픈데이터
파이썬과 커뮤니티와 한국어 오픈데이터Eunjeong (Lucy) Park
 
모두의 JIT 컴파일러
모두의 JIT 컴파일러모두의 JIT 컴파일러
모두의 JIT 컴파일러우경 성
 
Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.SeungWoo Lee
 
Tensorflow service & Machine Learning
Tensorflow service & Machine LearningTensorflow service & Machine Learning
Tensorflow service & Machine LearningJEEHYUN PAIK
 
병렬 프로그래밍
병렬 프로그래밍병렬 프로그래밍
병렬 프로그래밍준혁 이
 
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기zupet
 
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Ki-Hwan Kim
 
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요NAVER D2
 
20150306 파이썬기초 IPython을이용한프로그래밍_이태영
20150306 파이썬기초 IPython을이용한프로그래밍_이태영20150306 파이썬기초 IPython을이용한프로그래밍_이태영
20150306 파이썬기초 IPython을이용한프로그래밍_이태영Tae Young Lee
 
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)Tae Young Lee
 
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영Tae Young Lee
 
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스Seunghwa Song
 
Python 게임서버 안녕하십니까 : RPC framework 편
Python 게임서버 안녕하십니까 : RPC framework 편Python 게임서버 안녕하십니까 : RPC framework 편
Python 게임서버 안녕하십니까 : RPC framework 편준철 박
 
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅Youngmin Koo
 
[244] 분산 환경에서 스트림과 배치 처리 통합 모델
[244] 분산 환경에서 스트림과 배치 처리 통합 모델[244] 분산 환경에서 스트림과 배치 처리 통합 모델
[244] 분산 환경에서 스트림과 배치 처리 통합 모델NAVER D2
 
1.Introduction to Python and TensorFlow
1.Introduction to Python and TensorFlow1.Introduction to Python and TensorFlow
1.Introduction to Python and TensorFlowHaesun Park
 
Python 생태계의 이해
Python 생태계의 이해Python 생태계의 이해
Python 생태계의 이해용 최
 

What's hot (19)

PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보
PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보
PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보
 
파이썬과 커뮤니티와 한국어 오픈데이터
파이썬과 커뮤니티와 한국어 오픈데이터파이썬과 커뮤니티와 한국어 오픈데이터
파이썬과 커뮤니티와 한국어 오픈데이터
 
모두의 JIT 컴파일러
모두의 JIT 컴파일러모두의 JIT 컴파일러
모두의 JIT 컴파일러
 
Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.
 
Tensorflow service & Machine Learning
Tensorflow service & Machine LearningTensorflow service & Machine Learning
Tensorflow service & Machine Learning
 
병렬 프로그래밍
병렬 프로그래밍병렬 프로그래밍
병렬 프로그래밍
 
파이선 실전공략-1
파이선 실전공략-1파이선 실전공략-1
파이선 실전공략-1
 
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
 
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
 
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
 
20150306 파이썬기초 IPython을이용한프로그래밍_이태영
20150306 파이썬기초 IPython을이용한프로그래밍_이태영20150306 파이썬기초 IPython을이용한프로그래밍_이태영
20150306 파이썬기초 IPython을이용한프로그래밍_이태영
 
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
 
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
 
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
 
Python 게임서버 안녕하십니까 : RPC framework 편
Python 게임서버 안녕하십니까 : RPC framework 편Python 게임서버 안녕하십니까 : RPC framework 편
Python 게임서버 안녕하십니까 : RPC framework 편
 
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
 
[244] 분산 환경에서 스트림과 배치 처리 통합 모델
[244] 분산 환경에서 스트림과 배치 처리 통합 모델[244] 분산 환경에서 스트림과 배치 처리 통합 모델
[244] 분산 환경에서 스트림과 배치 처리 통합 모델
 
1.Introduction to Python and TensorFlow
1.Introduction to Python and TensorFlow1.Introduction to Python and TensorFlow
1.Introduction to Python and TensorFlow
 
Python 생태계의 이해
Python 생태계의 이해Python 생태계의 이해
Python 생태계의 이해
 

Similar to Reduce testing time by Multiprocessing in python

Free rtos seminar
Free rtos seminarFree rtos seminar
Free rtos seminarCho Daniel
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드KwangSeob Jeong
 
Blockchain Study(4) - Geth & Smart Contract
Blockchain Study(4) - Geth & Smart ContractBlockchain Study(4) - Geth & Smart Contract
Blockchain Study(4) - Geth & Smart ContractFermat Jade
 
R2서버정진욱
R2서버정진욱R2서버정진욱
R2서버정진욱jungjinwouk
 
Concurrent programming
Concurrent programmingConcurrent programming
Concurrent programmingByeongsu Kang
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)Dong Chan Shin
 
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...hoondong kim
 
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)Ubuntu Korea Community
 
Asynchronous 101 - (1)
Asynchronous 101 - (1)Asynchronous 101 - (1)
Asynchronous 101 - (1)MinChul Lee
 
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdfOS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdfHo Jeong Im
 
System Infra와 Recovery 그리고 DevOps
System Infra와 Recovery 그리고 DevOpsSystem Infra와 Recovery 그리고 DevOps
System Infra와 Recovery 그리고 DevOpsJuseok Kim
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)내훈 정
 
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들Kivol
 
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스NAVER D2
 
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기ksdc2019
 
LSTM 네트워크 이해하기
LSTM 네트워크 이해하기LSTM 네트워크 이해하기
LSTM 네트워크 이해하기Mad Scientists
 
2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요
2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요
2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요Yongho Ha
 

Similar to Reduce testing time by Multiprocessing in python (20)

Free rtos seminar
Free rtos seminarFree rtos seminar
Free rtos seminar
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
 
os question
os questionos question
os question
 
Blockchain Study(4) - Geth & Smart Contract
Blockchain Study(4) - Geth & Smart ContractBlockchain Study(4) - Geth & Smart Contract
Blockchain Study(4) - Geth & Smart Contract
 
R2서버정진욱
R2서버정진욱R2서버정진욱
R2서버정진욱
 
9
99
9
 
Concurrent programming
Concurrent programmingConcurrent programming
Concurrent programming
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
 
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
 
Asynchronous 101 - (1)
Asynchronous 101 - (1)Asynchronous 101 - (1)
Asynchronous 101 - (1)
 
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdfOS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
 
System Infra와 Recovery 그리고 DevOps
System Infra와 Recovery 그리고 DevOpsSystem Infra와 Recovery 그리고 DevOps
System Infra와 Recovery 그리고 DevOps
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
 
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
 
Kubernetes
Kubernetes Kubernetes
Kubernetes
 
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스
 
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
 
LSTM 네트워크 이해하기
LSTM 네트워크 이해하기LSTM 네트워크 이해하기
LSTM 네트워크 이해하기
 
2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요
2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요
2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요
 

Reduce testing time by Multiprocessing in python

  • 1. 멀티 프로세스를 이용한 테스트. (Multiprocessing를 통한 테스트 소요시간 단축) 2019.03.27 데이터 비즈 파트 안상준
  • 2. 멀티 프로세스를 이용한 테스트. (Multiprocessing를 통한 테스트 소요시간 단축) 2019.03.27 데이터 비즈 파트 안상준
  • 3. Multiprocessing… • 다중 처리(多重處理)는 컴퓨터 시스템 한 대에 둘 이상의 중앙 처리 장치(CPU)를 이용하여 병렬로 처리하는 것을 가리킨다. 또, 이 용어는 하나 이상의 프로세서를 지원하는 시스템의 능력, 또는 이들 사이의 태스크를 할당하는 능력을 가리키기도 한다.[1] 다중 처리 시스템(Multiprocessing System)은 다중 처리가 적용된 시스템을 뜻한다. https://ko.wikipedia.org/wiki/%EC%9E%90%EB %8F%99%ED%99%94
  • 4. Time = Money 시간은 돈입니다. 우리의 Working Time은 소중하니까요.
  • 5. Chat-bot의 똑똑함 = TC의 Accuracy 즉, 매일 매일 Chat-bot이 얼마나 어제 보다 똑똑해 졌는지가 화두죠.
  • 6. Accuracy의 증가는 더욱 더 똑똑해진 Chat-bot을 의미 합니다.
  • 7. 개선Code 혹은 Logic을 확인 하려면, 테스트를 돌려서 결과를 확인해야 합니다.
  • 8. 헌데, 테스트 해야 되는 문장이 많지 않나요? 일반 TC는 대충 1만 문장, Precision Test는 3만 5천 Rule 키워드를 테스트 합니다.
  • 9. 그럼, 테스트 결과는 얼마나 기다려야 되죠? 문장 Test = 약 6 시간 Precision Test = 약 13시간 총 약 19시간이 소모 됩니다.
  • 10. 문장 TC만 해도 Working Time 안에 확인 가능 한가요? 오후에 테스트를 돌리게 되면 다음날 확인해야 되는 불상사가 생기게 되죠.
  • 11. TC결과 확인이 늦으면, 그럼 다음 수정도 늦어 지겠네요? 네, 맞습니다. 그래서 다들 “테스트 얼마 남았어?” “테스트 결과 언제 쯤 나올 것 같아요?” 라는 질문을 반복하죠. 앞으로도 이런 일은 반복 됩니다….
  • 12. 테스트 수행시간이 너무 많이 드네요.. 작업에 Pain point가 어딘가요? 네트워크(DF, IC Request), 디스크(Excel Read and Write) – I/O 작업. 라이브러리 참조(NLTK, SPACY), Logic수행(keyword 검출) – CPU 작업.
  • 13. 그럼, 어떻게 테스트 시간을 줄일 수 있나요? 시간이 갈수록 문장 개수는 많아지고 TC시간은 점점 늘어날 텐데… 우린 새로운 방법은 찾아야 했습니다 !!
  • 14. Python Multiprocessing Single로 돌아가는 TC를 나눠 병렬로 처리하자 !! (고통 분담) https://docs.python.org/ko/3/library/multiprocessing.html
  • 15. 헌데, 제가 알기론 Python은 Single Thread라고 한 것 같은데? 어떻게 병렬 처리를 하죠? Multiprocessing Package는 병렬성과 동시성을 제공하며, 일반적인 Thread 대신에 서브 프로세스를 사용하여 Global Interpreter Lock을 효과적으로 회피 합니다.
  • 16. 병렬성과 동시성은 같은 말 아닌가요? 병렬성 != 동시성 병렬성은 -> I/O (Network)에 대한 고민 동시성은 -> CPU Boundary에 대한 고민
  • 17. Multiprocessing은 어떤 종류들이 있나요? 크게 Async and Sync로 나뉘게 됩니다. http://blog.naver.com/PostView.nhn?blogId=parkjy76&logNo=221089918474&categoryNo =48&parentCategoryNo=0&viewDate=&currentPage=1&postListTopCurrentPage=1&from=postView
  • 18. Async랑 Sync 많이 들어 보긴 했는데, 솔직히 어떤 차이죠? Block && None Block의 차이 결과 값을 기다려주나요? 아닌가요?
  • 19. Map, Apply는 어떻게 다른 거죠? Map은 호출 인자로 Iterable 한 것만 넣을 수 있고. Apply는 개별 args 를 넣을 수 있는 형태로 되어 있습니다.
  • 20. 그럼, 이 패키지는 어떻게 사용했던 건가요?
  • 21.
  • 22.
  • 23. 그래서, 얼마나 빨라 졌는데요? 이전 테스트 시간 6시간에서 대략 4분에 1정도의 시간으로 줄었음. 4999초 → 1시간 23분
  • 24. 그럼 혹시. 코드 재활용도 가능한가요? 저는 다른 테스트도 이렇게 돌리고 싶은데? 해당 코드를 재활용하여 (기존 테스트 Dependency를 제거 후) Precision Test 테스트도 재활용하여 Multi-Test로 사용하고 있습니다.
  • 25. 결론은요? :( 이런 방법도 있으니 다른 프로젝트에서도 테스트에 시간을 많이 허비하고 있거나 수행하는 Logic에 Burden이 있으시면 Multiprocessing을 추천 드립니다 :)