결정적인 방식으로 파이썬의 비동기 함수 시작하기
세 가지 작업이 있다고 가정해 보겠습니다.
task_A: task_B: task_C:
+------------+ +------------+ +------------+
| | | | | |
| A_1 | | B_1 | | C_1 |
| | | | | |
+------------+ +------------+ +------------+
| | | | | |
| A_wait | | B_wait | | C_wait |
| | | | | |
+------------+ +------------+ +------------+
| | | | | |
| A_2 | | B_2 | | C_2 |
| | | | | |
+------------+ +------------+ +------------+
Tasks
A_1
, B_1
, C_1
, A_2
, B_2
, C_2
는 우리가 실제로 실행하고 싶은 것이지만, 우리는 또한 작업들 사이에 일정 시간 동안 기다려야 합니다. 작업 A_wait
, B_wait
, C_wait
.우리가 이것들을 순서대로 실행한다면
+-------+ +-----------------------+ +-------+
| | | | | |
| A_1 | | A_wait | | A_2 |
| | | | | |
+-------+ +-----------------------+ +-------+
+-------+ +-----------------------+ +-------+
| | | | | |
| B_1 | | B_wait | | B_2 |
| | | | | |
+-------+ +-----------------------+ +-------+
+-------+ +-----------------------+ +-------+
| | | | | |
| C_1 | | C_wait | | C_2 |
| | | | | |
+-------+ +-----------------------+ +-------+
소스가 포함된 요지는 다음과 같습니다.
즉, 예를 들어 각 대기는 1분 동안 지속되며 총 대기 시간은 3분이 됩니다. 그리고 다른 작업을 추가하면 이 시간은 4분이 됩니다.
대신 task_B
가 완료되기를 기다리는 동안 A_wait
실행을 시작할 수 있고 B_wait
를 누르면 task_C
시작할 수 있습니다. 그렇게 하면 다른 작업을 추가한 후에도 대기 시간을 총 1분으로 줄일 수 있습니다.
이것이 바로 파이썬의 asyncio 모듈을 사용하여 할 수 있는 일입니다. 이를 통해 비동기 코드를 작성할 수 있습니다.
내가 달성하고자 하는 실행 순서는 다음과 같습니다.
+-------+ +-----------------------+ +-------+
| | | | | |
| A_1 | | A_wait | | A_2 |
| | | | | |
+-------+ +-----------------------+ +-------+
+-------+ +-----------------------+ +-------+
| | | | | |
| B_1 | | B_wait | | B_2 |
| | | | | |
+-------+ +-----------------------+ +-------+
+-------+ +-----------------------+ +-------+
| | | | | |
| C_1 | | C_wait | | C_2 |
| | | | | |
+-------+ +-----------------------+ +-------+
여기에 첫 번째 시도가 있습니다:
<스크립트 아이디="gist-ltag"src="https://gist.github.com/serpent7776/c235953f74ae194bd1c183b4815dc219.js?file=demo1.py"/>
기본적으로 작업을 async
로 정의하고 다른 비동기 호출에서 수행await
해야 합니다. 우리의 경우 1분 동안 지속되는 대기 호출입니다. 이렇게 하면 현재 비동기 작업이 일시 중단되고 다음 작업이 시작됩니다.
이 코드의 문제는 작업이 실행되는 순서가 정의되어 있지 않다는 것입니다. 따라서 실행할 첫 번째 작업은 task_C
일 수 있으며 우리는 알 수 없습니다.
다행히도 작업이 실행되기를 원하는 순서를 지정하는 방법이 있습니다. 우리가 해야 할 일은 실행을 위해 예약하려는 순서대로 Task 개체를 생성하는 것입니다.
<스크립트 아이디="gist-ltag"src="https://gist.github.com/serpent7776/c235953f74ae194bd1c183b4815dc219.js?file=demo2.py"/>
이를 통해 예측 가능한 작업 스케줄링으로 작업을 비동기식으로 실행할 수 있습니다.
Reference
이 문제에 관하여(결정적인 방식으로 파이썬의 비동기 함수 시작하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/serpent7776/launching-python-s-async-functions-in-deterministic-way-54ah텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)