일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 알고리즘
- 소프트웨어
- 자료구조
- 소프트웨어공학
- 데이터구조
- 딥러닝
- 보안
- 데이터과학
- 네트워크보안
- 웹개발
- 머신러닝
- 인공지능
- 프로그래밍
- 버전관리
- Yes
- 컴퓨터비전
- 프로그래밍언어
- 2
- 파이썬
- 빅데이터
- 사이버보안
- 자바스크립트
- 데이터베이스
- 컴퓨터과학
- 데이터분석
- 클라우드컴퓨팅
- 네트워크
- 코딩
- 컴퓨터공학
- I'm Sorry
- Today
- Total
스택큐힙리스트
파이썬3의 `await`은 협력적인 멀티태스킹입니까? 본문
나는 Python 3.5에서 소개된 asyncio 코루틴을 이해하려고 노력하고 있습니다.
1997년에 대학에서 Andrew Tanenbaum의 책 Modern Operating Systems의 내용을 대략적으로 다룬 과정을 수강했습니다.
어떻게든 Python3의 await
는 저에게 Cooperative Multitasking을 떠올리게 합니다.
Wikipedia에서:
Cooperative multitasking, also known as non-preemptive multitasking, is a style of computer multitasking in which the operating system never initiates a context switch from a running process to another process. Instead, processes voluntarily yield control periodically or when idle in order to enable multiple applications to be run simultaneously. This type of multitasking is called cooperative because all programs must cooperate for the entire scheduling scheme to work.
파이썬 인터프리터를 운영체제처럼 보면, 협력적 멀티태스킹이 await
에 적용될까요?
하지만 어떤 부분을 놓치고 있는지도 있을 수 있습니다.
답변 1
코루틴 함수 내에서는 결과가 사용 가능할 때까지 코루틴 실행을 일시 중단하기 위해 대기 표현식(await 표현식)을 사용할 수 있습니다. await() 메소드를 정의하여 대기 가능한 프로토콜을 구현하는 한, 아무 객체든 대기할 수 있습니다.
코루틴은 다른 코루틴과 함께 await 키워드를 사용하여 실행을 일시 중단할 수 있습니다. 일시 중단되는 동안, 코루틴의 상태는 유지되어 다음에 깨어났을 때 이전 위치부터 실행을 재개할 수 있습니다. 그건 제게는 협력적인 멀티태스킹과 매우 흡사합니다. 이 예제를 참조하세요.
답변 2
`await` 키워드는 Python 3에서 제공되는 asyncio 패키지와 함께 사용되는데, 이는 협력적인 멀티태스킹(cooperative multitasking) 기능을 제공합니다. 멀티태스킹은 운영체제가 여러 작업을 동시에 실행하는 기능을 의미하며, 협력적인 멀티태스킹은 각 작업이 제어권을 자발적으로 양보할 때 동작하는 방식입니다.Python의 `await` 키워드는 비동기적인 작업을 수행할 때 사용됩니다. 함수에 `await`가 표시되면 해당 함수는 비동기 함수로 간주되어 이벤트 루프 내에서 동작하게 됩니다. 이때 `await` 키워드 뒷부분에는 비동기 작업이 완료될 때까지 기다려야 할(awaitable) 객체가 위치하게 됩니다.
예를 들어, 네트워크 요청을 비동기적으로 수행할 때 `await` 키워드를 사용할 수 있습니다. 비동기 함수에서 네트워크 요청을 보내면, 이 요청에 대한 응답이 도착하기 전까지 다른 작업을 처리하거나 다른 요청을 보낼 수 있습니다. 이런 방식으로 `await`를 사용하여 작업을 비동기적으로 수행함으로써, 작업 간의 효율적인 리소스 공유와 작업 대기 시간 최소화가 가능해집니다.
`await`를 사용하기 위해선 `async` 키워드가 함수 정의 앞에 위치해야 합니다. 이렇게 함으로써 해당 함수는 비동기 함수로 선언되고, `await`를 통해 비동기 작업의 완료를 기다릴 수 있게 됩니다.
Python 3의 `asyncio` 패키지를 이용하여 `await`를 사용하는 비동기 작업은 협력적인 멀티태스킹을 구현하는 데 유용합니다. 이는 여러 작업이 한 번에 실행되거나 완료될 때까지 제어권을 자발적으로 양보하여 해당 작업들 사이에서의 효율적인 일처리를 가능하게 합니다.
따라서, `await`는 Python 3에서 제공되는 `asyncio` 패키지와 함께 사용되는 협력적인 멀티태스킹 기능을 제공하는 키워드로써 많은 장점을 가지고 있습니다. 비동기 작업을 우아하게 처리하고, 리소스를 효율적으로 활용하는 솔루션을 개발하고자 할 때 `await`를 적극 활용할 수 있습니다.