> 백엔드 개발 > 파이썬 튜토리얼 > Python 업데이트 비동기 지원의 상호 운용성

Python 업데이트 비동기 지원의 상호 운용성

Patricia Arquette
풀어 주다: 2025-01-20 00:21:09
원래의
394명이 탐색했습니다.

마지막 IoP 업데이트 이후 오랜 시간이 흘렀습니다. 따라잡자!

Interoperability On Python update async support

IoP 명령줄 인터페이스에 중요한 개선 사항이 추가되었습니다.

  • 이름 변경: 프로젝트의 새로운 브랜드에 맞춰 grongier.pex 모듈의 이름이 iop으로 변경되었습니다.
  • 비동기 지원: 이제 IoP는 비동기 기능과 코루틴을 완벽하게 지원합니다.

프로젝트 이름 바꾸기

grongier.pex 모듈은 이전 버전과의 호환성을 위해 계속 액세스할 수 있지만 향후 릴리스에서는 제거될 예정입니다. 새로운 개발에는 iop 모듈을 사용하세요.

비동기 기능

IoP는 오랫동안 비동기 호출을 지원해 왔지만 이전에는 비동기 함수와 코루틴을 직접 사용할 수 없었습니다. 이 새로운 기능을 탐색하기 전에 InterSystems IRIS 내에서 비동기 호출이 어떻게 작동하는지 검토하고 두 가지 예를 살펴보겠습니다.

기존 비동기 호출

이는 전통적인 접근 방식을 보여줍니다.

<code class="language-python">from iop import BusinessProcess
from msg import MyMessage


class MyBP(BusinessProcess):

    def on_message(self, request):
        msg_one = MyMessage(message="Message1")
        msg_two = MyMessage(message="Message2")

        self.send_request_async("Python.MyBO", msg_one, completion_key="1")
        self.send_request_async("Python.MyBO", msg_two, completion_key="2")

    def on_response(self, request, response, call_request, call_response, completion_key):
        if completion_key == "1":
            self.response_one = call_response
        elif completion_key == "2":
            self.response_two = call_response

    def on_complete(self, request, response):
        self.log_info(f"Received response one: {self.response_one.message}")
        self.log_info(f"Received response two: {self.response_two.message}")</code>
로그인 후 복사

이는 IRIS의 비동기 호출 동작을 반영합니다. send_request_async는 비즈니스 운영에 요청을 보내고 on_response는 수신된 응답을 처리합니다. completion_key 응답을 차별화합니다.

동기식 다중 요청 기능

완전히 새로운 것은 아니지만 여러 동기식 요청을 동시에 보내는 기능은 주목할 만합니다.

<code class="language-python">from iop import BusinessProcess
from msg import MyMessage


class MyMultiBP(BusinessProcess):

    def on_message(self, request):
        msg_one = MyMessage(message="Message1")
        msg_two = MyMessage(message="Message2")

        tuple_responses = self.send_multi_request_sync([("Python.MyMultiBO", msg_one),
                                                        ("Python.MyMultiBO", msg_two)])

        self.log_info("All requests have been processed")
        for target, request, response, status in tuple_responses:
            self.log_info(f"Received response: {response.message}")</code>
로그인 후 복사

이 예에서는 동일한 비즈니스 운영에 두 개의 요청을 동시에 보냅니다. 응답은 각 호출에 대한 대상, 요청, 응답 및 상태를 포함하는 튜플입니다. 이는 요청 순서가 중요하지 않을 때 특히 유용합니다.

비동기 함수 및 코루틴

IoP에서 비동기 기능과 코루틴을 활용하는 방법은 다음과 같습니다.

<code class="language-python">import asyncio

from iop import BusinessProcess
from msg import MyMessage


class MyAsyncNGBP(BusinessProcess):

    def on_message(self, request):

        results = asyncio.run(self.await_response(request))

        for result in results:
            print(f"Received response: {result.message}")

    async def await_response(self, request):
        msg_one = MyMessage(message="Message1")
        msg_two = MyMessage(message="Message2")

        tasks = [self.send_request_async_ng("Python.MyAsyncNGBO", msg_one),
                 self.send_request_async_ng("Python.MyAsyncNGBO", msg_two)]

        return await asyncio.gather(*tasks)</code>
로그인 후 복사

send_request_async_ng을 사용하여 여러 요청을 동시에 보냅니다. asyncio.gather 모든 응답이 동시에 대기되도록 합니다.

여기까지 잘 따라오셨다면 "부메랑" 댓글 부탁드려요! 그것은 많은 것을 의미할 것입니다. 감사합니다!

await_response은 여러 요청을 보내고 모든 응답을 기다리는 코루틴입니다.

비동기 함수와 코루틴을 사용하면 병렬 요청을 통한 성능 향상, 가독성 및 유지 관리 용이성 향상, asyncio 모듈을 사용한 유연성 향상, 예외 및 시간 초과 처리 향상 등의 이점이 있습니다.

비동기 방식 비교

send_request_async, send_multi_request_sync, send_request_async_ng의 주요 차이점은 무엇인가요?

  • send_request_async: on_response이 구현되고 completion_key이 사용되는 경우에만 요청을 보내고 응답을 기다립니다. 단순하지만 병렬 요청의 경우 확장성이 떨어집니다.
  • send_multi_request_sync: 여러 요청을 동시에 보내고 모든 응답을 기다립니다. 사용하기는 쉽지만 응답 순서가 보장되지 않습니다.
  • send_request_async_ng: 여러 요청을 동시에 보내고 응답 순서를 유지하면서 모든 응답을 기다립니다. 비동기 함수와 코루틴이 필요합니다.

즐거운 멀티스레딩을 즐기세요!

위 내용은 Python 업데이트 비동기 지원의 상호 운용성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿