"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Python에서 Async/Await를 사용하여 "Fire and Forget"을 어떻게 달성할 수 있나요?

Python에서 Async/Await를 사용하여 "Fire and Forget"을 어떻게 달성할 수 있나요?

2024년 11월 21일에 게시됨
검색:612

How Can I Achieve

Async/Await Python의 "Fire and Forget"

문제 설명

Async/await는 Python의 비동기 프로그래밍을 위한 편리한 구문을 제공합니다. 그러나 완료를 기다리지 않고 비동기 작업을 시작하려는 상황이 있습니다. 이를 종종 "실행 후 잊어버리기"라고 합니다.

asyncio.Task를 사용하는 솔루션

Python은 백그라운드에서 실행될 작업을 생성할 수 있는 asyncio.Task를 제공합니다. asyncio.Task를 사용하면 스크립트에 다음 코드를 추가하여 "실행 후 잊어버리기"를 달성할 수 있습니다.

import asyncio

async def async_foo():
    # Do some asynchronous stuff here

# Create a task for async_foo()
asyncio.ensure_future(async_foo())

이것은 메인 스레드를 차단하지 않고 비동기적으로 실행되는 async_foo()에 대한 작업을 생성합니다.

보류 중인 작업 처리

스크립트가 모든 작업이 완료되기 전에 완료되면 다음 코드를 사용하여 보류 중인 모든 작업을 기다릴 수 있습니다.

pending_tasks = asyncio.Task.all_tasks()
loop.run_until_complete(asyncio.gather(*pending_tasks))

이렇게 하면 스크립트가 종료되기 전에 모든 작업이 완료되어 경고나 오류가 발생하지 않습니다.

작업 취소

어떤 경우에는 작업이 완료될 때까지 기다리고 싶지 않을 수도 있습니다. 다음 코드를 사용하여 취소할 수 있습니다:

for task in pending_tasks:
    task.cancel()
    with suppress(asyncio.CancelledError):
        loop.run_until_complete(task)

이것은 작업을 취소하고 취소 결과로 발생할 수 있는 모든 오류를 억제합니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3