asyncio는 Python 버전 3.4에 도입된 표준 라이브러리로, 비동기 IO를 기본적으로 지원합니다. asyncio의 프로그래밍모델은 메시지루프입니다. 오늘은 코루틴과 Futureasyncio의 객체
">
코루틴과 Future
의 관계에 대해 자세히 논의하겠습니다. 둘 다인 것 같습니다. 마찬가지로, 다음 구문을 사용하여 결과를 비동기적으로 얻을 수 있기 때문에
result = await future result = await coroutine
사실 코루틴은 외부에서 수신할 수 있는 생성기함수입니다. 매개변수도 결과를 생성할 수 있습니다. 코루틴을 사용하면 함수를 일시 중지한 다음 나중에 실행을 다시 시작할 수 있다는 것입니다. 예를 들어 네트워크 작업이 관련된 경우 응답이 도착할 때까지 함수를 중지할 수 있습니다.
그리고 Future는 Javascript의 Promise 객체에 더 가깝습니다. 위 예에서 값이 계산되는 자리 표시자입니다. 네트워크 IO 함수가 완료되기를 기다리고 있습니다. 함수는 컨테이너를 제공하고, 완료되면 Promise가 컨테이너를 채울 것입니다. 채우기 후에 콜백 함수 를 사용하여 이를 얻을 수 있습니다. 실제 결과
태스크 객체는 코루틴과 Future를 연결하고 코루틴을 Future 객체로 캡슐화하는 Future의 하위 클래스입니다.
일반적으로 작업을 시작하는 두 가지 방법을 볼 수 있습니다. >
tasks = asyncio.gather( asyncio.ensure_future(func1()), asyncio.ensure_future(func2()) ) loop.run_until_complete(tasks)및
tasks = [ asyncio.ensure_future(func1()), asyncio.ensure_future(func2()) ] loop.run_until_complete(asyncio.wait(tasks))ensure_future는 코루틴을 작업으로 캡슐화할 수 있습니다. asyncio.gather는 일부 퓨처와 코루틴을 퓨처로 캡슐화합니다asyncio.wait는 run_until_complete는 Future 객체 또는 코루틴 객체를 받을 수 있습니다. 종료하려면 CTRL-C를 사용하십시오. 예외가 발생하더라도 이벤트 루프의 작업은 오류를 보고하고 다음 오류가 나타납니다. 작업이 파괴되었지만 보류 중입니다!
작업 : <대기 중인 작업 coro=
공식 문서에 따르면 Task 개체는 다음 상황에서만 종료된 것으로 간주됩니다.
결과/예외가 가능하거나 future가 취소된 경우
Task 객체와 해당 상위 클래스 취소 Future는 약간 다릅니다. Task.cancel()이 호출되면 해당 코루틴은 event
BaseEventLoop.run_until_complete(future) Run until the Future is done. If the argument is a coroutine object, it is wrapped by ensure_future(). Return the Future's result, or raise its exception.를 사용하여 모든 작업을 찾아 취소할 수 있습니다.
그러나 CTRL-C도 이벤트 루프를 중지하므로 이벤트 루프를 다시 시작해야 합니다.
for task in asyncio.Task.all_tasks(): task.cancel()확실하지 않은 경우 각 작업에서 예외를 포착해야 합니다. asyncio.gather(..., return_Exceptions=True)예외를 일반 결과로 변환하고 반환할 수 있습니다.
위 내용은 asyncio에서 코루틴 객체와 Future 객체를 사용하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!