Python Concurrent Programming: From Data Collection to Web Development (feat. FastAPI, async, await)
async await 문법 질문
237
86 asked
선생님 안녕하세요
좋은 강의 감사합니다.
async await 등의 문법 관련해서 질문이 있습니다.
코루틴을 만들때 언제 async 나 await을 써야하는지 잘 이해가 되지 않고, 인터넷을 찾아봐도 이해가 잘 되지 않습니다. 이것을 설명하는 자료나 공식문서가 따로 있나요?
예를 들어, 4-2 코드 파일에서
# (a) 부분
async def fetcher(session, url):
async with session.get(url) as response: # (b) 부분
return await response.text() # (c) 부분
async def main():
urls = ["https://naver.com", "https://google.com", "https://instagram.com"] * 10
async with aiohttp.ClientSession() as session: # (d) 부분
# (e) 부분
result = await asyncio.gather(*[fetcher(session, url) for url in urls])
"비동기 함수를 만들때 def 앞에 async 라는 것을 쓰는 것이다" 는 이해를 하겠는데,
예를 들어 (b) 부분에서 with 앞에 왜 async를 써야 하는지 (함수를 정의할때 async를 썼는데 왜 함수 안의 with 절 앞에 또 async를 써줘야 하나요?) ,
(c)에서 response.text() 앞에 왜 await을 써줘야 하는지 (async로 정의된 함수안에는 await을 무조건 써줘야 하나요? 그럼 모든 줄에 await을 써줘야 하나요? 아니라면 await을 써주는 줄과 안써주는 줄은 어떻게 구분하죠?)
(d) 에서도 왜 async를 써주는지,
(e) 에서는 await을 정의해주면서 왜 그 위에 urls 를 정의할때는 안 쓴것인지
이런 문법 자체가 궁금합니다. 혹시 이런것을 설명해주는 자료나 링크도 제공이 가능할까요?
Answer 1
0
안녕하세요, 인프런 AI 인턴입니다.
nathan 님의 async와 await 문법 관련 질문에 대해 비슷한 내용을 다룬 자료를 찾았습니다. 이 자료들은 async/await을 사용해 비동기 프로그래밍을 수행하는 방법과 관련 문법을 해설합니다.
특히, 질문하신 각 부분에서 async와 await을 사용하는 이유에 대한 설명이 포함되어 있으니 참고가 되실 것 같습니다.
(b) 부분에서
with앞에 왜async를 써야 하는지: 이는async with구문이 비동기 컨텍스트 매니저를 사용하도록 합니다.session.get(url)과 같은 비동기 연산을 수행할 때 이를 사용해야 비동기적으로 자원을 관리(예: 네트워크 연결 열고 닫기)할 수 있습니다.© 부분에서
await을 사용하는 이유:await키워드는 비동기 연산이 끝날 때까지 기다려줍니다.response.text()는 비동기로 실행되는 함수이므로 그 결과를 기다린 후에 반환하려면await을 사용해야 합니다.(d) 부분에서
async with을 사용하는 이유: 이는 aiohttp의 클라이언트 세션을 비동기적으로 사용하기 위함입니다.async with을 사용하면 세션 사용이 종료되면 자동으로 세션이 종료되도록 할 수 있습니다.(e) 부분의
await asyncio.gather(...)사용 이유:await은asyncio.gather함수로 실행된 모든 비동기 작업이 완료될 때까지 기다려줍니다. 이렇게 함으로써, 주어진 모든 URL에 대한 요청이 비동기적으로 완료된 후에 결과를result변수에 저장할 수 있습니다.urls를 정의할 때await을 사용하지 않는 이유는urls의 생성이 비동기 작업이 아니라 단순한 리스트 생성이기 때문입니다.
위와 관련된 더 구체적인 설명과 예시는 아래 링크에서 확인하실 수 있습니다:
- 파이썬 동시성 관련 질문 - 동시성과 비동기 프로그래밍의 기초적인 개념을 설명하고 있습니다.
- 안녕하세요 ~ 파이썬 코루틴 활용 강의에 대해 질문이 있습니다. - 코루틴 사용에 대한 예시와 설명이 포함되어 있습니다.
- with 사용 - with 구문과 비동기 연산 사용에 대해 설명합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
대규모 크롤링 시 동시 요청 수 제어 방법
0
94
2
AWS LighSail 접근 불가
0
135
1
강의상의 readme와 배포되어 있는 것이 다른 것 같아요
0
97
1
book_scraper.py 에서 import get_secret 관련 질문
0
101
1
ThreadPoolExecutor 중간에 멈추는 법
0
292
1
몽고Db 기초 질문
0
196
1
멀티 스레딩 질문..
0
194
1
교안 제공은 안되나요?
0
228
1
TypeError: field Config is defined without type annotation
0
259
1
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
0
1709
1
jinja2templates
0
245
1
몽고DB 설정 관련 질문
0
243
1
비동기 함수를 동기적인 실행으로 만드는 부분 질문입니다
1
309
2
proxy 사용 질문
0
264
1
AWS Lightsail SSL handshake failed 오류 문의드립니다.
0
492
1
동시성과 병렬성
0
327
1
python select linter ? 오류
1
740
2
수업질문
1
353
1
response 객체에서 키값으로 조회 시 KeyError 발생
0
569
1
from config import get_secret 질문
0
387
1
파이썬 코루틴활용 영상 질문
0
281
1
가상환경 설정 질문
0
317
1
pydantic import error
0
1226
2
동시성 프로그래밍으로 이미지 다운로더 개발
0
312
1

