Executor.map() 실험

매일 공부(ML)·2023년 5월 22일
0

Fluent Python

목록 보기
124/130

제어 흐름

Future를 이용한 동시성

Executor.map() 실험

Executor.map() 메서드를 이용하면 여러 콜러블을 아주 간단히 동시에 실행할 수 있다.

#ThreadPoolExecutor.map()메서드

from time import sleep, strftime
from concurrent import futures

def display(*args):
	print(strftime('[%H:%M:S]'), end=' ')
    print(*args)
    
def loiter(n):
	msg = '{}loiter({}): doing nothing for {}s...'
    display(msg.format('\t'*n, n, n))
    sleep(n)
    msg = '{}loiter({}): done.'
    display(msg.format('\t'*n,n))
    display(msg.format('\t'*n, n))
    return n* 10
    
def main():
	display('Script starting.')
    executor = futures.ThreadPoolExecutor(max_workers=3)
    results = executor.map(loiter, range(5))
    display('results:', results)
    display('Waiting for individual results:')
    for i, result in enumerate(results):
    	display('result {}: {}'.format(i,result))
main()

실행을 한 후 하나씩 나오는 결과를 직접 확인하면서 ThreadPoolExecutor 대한 max_workers인수도 변경하고 executor.


Executor.map()은 사용하기 쉽지만, 호출한 순서 그대로 결과를 반환한다.
이러한 특징은 장단점이 있다.

먼저 호출이 결과를 생성할 때까지 10초 걸리고 나머지 호출은 1초씩 걸린다면, map()이 반환한 제너레이터가 첫번째 결과를 가져오기까지 10초 걸린다. 그 후 다른 함수는 이미 실행을 완료했으므로 나머지 결과를 바로 가져올 수 있다.

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

0개의 댓글