- 애플리케이션을 사용자 데이터를 직접 보관하지 않고 외부 API를 호출해서 가져옵니다.
- 외부 API는 1명의 사용자 데이터를 조회하는데 1초가 걸리고, 한 번에 여러 사용자의 데이터를 조회할 수 없습니다.
- 각각 3명, 2명, 1명의 사용자 정보를 조회하는 요청 3개가 동시에 애플리케이션에 들어옵니다.
[ 동기 프로그래밍]
find_users_sync : 사용자 데이터 조회를 동기 방식으로 처리
time.sleep : 지연시간 발생
process_sync : 3개의 요청을 동기처리
import time
def find_users_sync(n):
for i in range(1, n + 1):
print(f'{n}명 중 {i}번 째 사용자 조회 중 ...')
time.sleep(1)
print(f'> 총 {n} 명 사용자 동기 조회 완료!')
def process_sync():
start = time.time()
find_users_sync(3)
find_users_sync(2)
find_users_sync(1)
end = time.time()
print(f'>>> 동기 처리 총 소요 시간: {end - start}')
if __name__ == '__main__':
process_sync()
3명 중 1번 째 사용자 조회 중 ...
3명 중 2번 째 사용자 조회 중 ...
3명 중 3번 째 사용자 조회 중 ...
> 총 3 명 사용자 동기 조회 완료!
2명 중 1번 째 사용자 조회 중 ...
2명 중 2번 째 사용자 조회 중 ...
> 총 2 명 사용자 동기 조회 완료!
1명 중 1번 째 사용자 조회 중 ...
> 총 1 명 사용자 동기 조회 완료!
>>> 동기 처리 총 소요 시간: 6.020448923110962
[비동기 프로그래밍]
async : 비동기 함수로 변경(coroutine)
asyncio.sleep : time.sleep과 기능은 동일하지만 CPU가 다른 처리를 할 수 있도록함
호출할 때 await 키워드를 사용함
asyncio.wait 함수의 배열 인자로 3개
import time
import asyncio
async def find_users_async(n):
for i in range(1, n + 1):
print(f'{n}명 중 {i}번 째 사용자 조회 중 ...')
await asyncio.sleep(1)
print(f'> 총 {n} 명 사용자 비동기 조회 완료!')
async def process_async():
start = time.time()
await asyncio.wait([
find_users_async(3),
find_users_async(2),
find_users_async(1),
])
end = time.time()
print(f'>>> 비동기 처리 총 소요 시간: {end - start}')
if __name__ == '__main__':
asyncio.run(process_async())
1명 중 1번 째 사용자 조회 중 ...
2명 중 1번 째 사용자 조회 중 ...
3명 중 1번 째 사용자 조회 중 ...
> 총 1 명 사용자 비동기 조회 완료!
2명 중 2번 째 사용자 조회 중 ...
3명 중 2번 째 사용자 조회 중 ...
> 총 2 명 사용자 비동기 조회 완료!
3명 중 3번 째 사용자 조회 중 ...
> 총 3 명 사용자 비동기 조회 완료!
>>> 비동기 처리 총 소요 시간: 3.0041661262512207
반응형
'SW ENGINEERING > Programing' 카테고리의 다른 글
Rainbow attack (0) | 2021.03.01 |
---|---|
단방향 해시 함수 (0) | 2021.03.01 |
쿠키와 세션 (0) | 2021.02.08 |
객체 지향 프로그래밍 OOP (0) | 2021.02.06 |
Apache Thrift Layered Architecture (0) | 2021.02.03 |
최근댓글