You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python异步函数脱离循环调用时无法接收服务端响应

问题分析与解决方法
  • 核心问题:你在发送请求后立刻调用server_connection.close(),此时服务端的响应还没来得及返回并触发回调,连接就被强制关闭了。原示例中的await asyncio.sleep(3)本质是给了足够时间让响应返回、回调执行,之后才执行关闭操作。

  • 解决方案:

    1. 可靠方案:等待响应回调触发后再关闭
      利用asyncio.Event等待响应回调的信号,确保响应处理完成后再关闭连接,示例代码如下:
      from their_stack import create_endpoint
      import asyncio
      
      async def my_send_request(remote_ip, remote_port):
          response_received = asyncio.Event()
      
          def handle_response(response):
              # 这里添加你的响应处理逻辑
              print("收到服务端响应:", response)
              response_received.set()
      
          server_connection = await create_endpoint(remote_ip, remote_port)
          # 注册响应回调函数(需确认库支持该注册方式)
          server_connection.set_response_callback(handle_response)
          server_connection.stack_send_request()
          # 等待响应处理完成
          await response_received.wait()
          server_connection.close()
      
      def main():
          asyncio.run(my_send_request("127.0.0.1", 9999))
      
    2. 临时方案:添加等待缓冲时间
      如果暂时不清楚库的回调注册机制,可以先添加短暂等待,确保响应有足够时间返回并被处理(注意:该方案仅用于临时调试,不适合生产环境):
      async def my_send_request(remote_ip, remote_port):
          server_connection = await create_endpoint(remote_ip, remote_port)
          server_connection.stack_send_request()
          await asyncio.sleep(1)  # 根据实际场景调整等待时长
          server_connection.close()
      

内容的提问来源于stack exchange,提问作者kingvittu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 09:31:33