python 멀티쓰레딩 - ThreadPoolExecutor 샘플코드
2023-03-12
.
Data_Engineering & Python_TIL(20230312)
인프런 “고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)” 강의를 공부하고 정리한 내용입니다.
** URL : https://www.inflearn.com/course/프로그래밍-파이썬-완성-인프런-오리지널
[공부한 내용]
샘플코드
import logging
from concurrent.futures import ThreadPoolExecutor
import time
# 스레드 실행 함수
def task(name):
logging.info("Sub-Thread %s: starting", name)
result = 0
for i in range(10001):
result = result + i
logging.info("Sub-Thread %s: finishing result: %d", name, result)
return True
# 메인 영역
def main():
# Logging format 설정
format = "%(asctime)s: %(message)s"
logging.basicConfig(format=format, level=logging.INFO, datefmt="%H:%M:%S")
logging.info("Main-Thread : before creating and running thread")
# 실행 방법1
# with context 구문 사용
with ThreadPoolExecutor(max_workers=3) as executor:
tasks = executor.map(task, ['First', 'Second'])
# 결과 확인
# print(list(tasks))
logging.info("Main-Thread : all done")
################################################################
# 실행 방법2
# max_workers : 작업의 개수가 남어가면 직접 설정이 유리
# executor = ThreadPoolExecutor(max_workers=3)
# task1 = executor.submit(task, ('First',))
# task2 = executor.submit(task, ('Second',))
# 결과 값 있을 경우
# print(task1.result())
# print(task2.result())
################################################################
if __name__ == '__main__':
main()
위에 코드를 실행하면 아래와 같이 출력됨
11:48:39: Main-Thread : before creating and running thread
11:48:39: Sub-Thread First: starting
11:48:39: Sub-Thread First: finishing result: 50005000
11:48:39: Sub-Thread Second: starting
11:48:39: Sub-Thread Second: finishing result: 50005000
11:48:39: Main-Thread : all done