as_completed 완료순서에 대한 간단한 질문입니다.
355
작성한 질문수 14
아래의 코딩은 수업시간 예제입니다.
제 질문은 같은 코드를 다른 파이썬 파일에서 재작성후 실행했을 때 완료 순서가 달리 나올수 있는가 입니다.
예제파일은 [10000, 100000, 1000000, 10000000] 순서로 완료 되었고,
제가 새로 작성한 곳에서는
[100000,10000,1000000, 10000000] 이 순서로 완료가 되었습니다.
import os
import time
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor, wait, as_completed
WORK_LIST = [10000, 100000, 1000000, 10000000]
# 동시성 합계 계산 메인 함수
# 누적 합계 함수(제레네이터)
def sum_generator(n):
return sum(n for n in range(1, n+1))
# wait
# as_completed
def main():
# Worker Count
worker = min(10, len(WORK_LIST))
# 시작 시간
start_tm = time.time()
# Futures
futures_list = []
# 결과 건수
# ProcessPoolExecutor
with ThreadPoolExecutor() as excutor:
for work in WORK_LIST:
# future 반환
future = excutor.submit(sum_generator, work)
# 스케쥴링
futures_list.append(future)
# 스케쥴링 확인
print('Scheduled for {} : {}'.format(work, future))
# print()
# wait 결과 출력
# result = wait(futures_list, timeout=7)
# # 성공
# print('Completed Tasks : ' + str(result.done))
# # 실패
# print('Pending ones after waiting for 7seconds : ' + str(result.not_done))
# # 결과 값 출력
# print([future.result() for future in result.done])
# as_completed 결과 출력
for future in as_completed(futures_list):
result = future.result()
done = future.done()
cancelled = future.cancelled
# future 결과 확인
print('Future Result : {}, Done : {}'.format(result, done))
print('Future Cancelled : {}'.format(cancelled))
# 종료 시간
end_tm = time.time() - start_tm
# 출력 포멧
msg = '\n Time : {:.2f}s'
# 최종 결과 출력
print(msg.format(end_tm))
# 실행
if __name__ == '__main__':
main()
답변 1
1
네 맞습니다.
실행 순서가 먼저 끝나는 대로 리턴됩니다.
논리적으로 보면 숫자가 작은 순서대로 나오겠지만, 1000, 10000, 100000 까지는 금방 처리될 것으로 생각되네요.
컨텍스트 체인지 하는 cost(비용) 도 고려하기 때문에 순서는 언제든지 달라질 수 있어요!
진도미확인 (진도가 안 넘어감)
0
39
1
RuntimeError: There is no current event loop in thread 'MainThread'
0
83
1
chapter 07-01 실행 오류
0
66
1
Chapter05-04 : sum_func의 합이 이중 출력됩니다.
0
76
2
45. 병렬성 2 - Futures(5-1) wait가 의도된 대로 동작하지 않습니다.
0
92
2
멀티스레딩 - 44. 병렬성 1 - Futures(4-2)
0
70
2
chapter05_02 클로저 질문사항 !
0
49
1
LV1 설정
0
87
2
매직 메소드의 호출 방법 차이 문의
0
131
2
왜 numbers리스트를 만들때 str으로 숫자를 감싸나요?
0
93
2
스크랩핑 실습 중 Mac OS 인증서 문제
0
128
1
AsyncIO 멀티 스크랩핑 실습 예제 관련 질문
0
167
1
강의자료가 영상과 다릅니다
0
255
2
closure.cell_contents 초기화 하기 문의
0
128
2
map함수 사용 시, list변환 방법 문의
0
335
2
__mul__ 백터 * 숫지, 백터 * 백터 처리
0
143
1
del처리후 질문입니다.
0
153
1
car_list(car1,car2,car3) 인스턴스 tuple 타입 문의
0
223
1
coroutine에 대한 질문
0
242
1
제너레이터 이터레이터 질문이 있습니다.
0
248
1
atom install package search not working
0
275
1
Magic Method - Not Implemented
0
394
1
가상환경 질문!
0
400
1
병렬처리 추가 질문이 있습니다.
0
242
1





