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

如何使用pygbag正确发起HTTPS请求并避免asyncio.run()错误?

解决pygbag发起HTTPS请求时的asyncio事件循环错误

问题根源

pygbag在浏览器环境下会自动启动并维护一个asyncio事件循环,你代码里用asyncio.run(main())会尝试创建新的事件循环,导致冲突,抛出RuntimeError: asyncio.run() cannot be called from a running event loop错误。另外,RequestHandler是pygbag专为Web环境适配的请求工具,本地直接运行需要做环境兼容处理。

解决方案

1. 区分运行环境

通过判断是否处于pygbag的Web环境,调整事件循环的使用方式:

  • 在pygbag环境中:直接将异步任务提交到已有的事件循环
  • 本地测试环境:使用asyncio.run()或者获取现有循环添加任务

2. 修改后的代码

import asyncio
import json
from pygbag.support.cross.aio.fetch import RequestHandler

BASE_URL = "https://your-api-domain.com"  # 替换为你的实际API地址

async def send_request(data):
    handler = RequestHandler()
    try:
        response = await handler.post(f"{BASE_URL}/endpoint", data=data)
        if response:
            print("POST /endpoint: Success")
            response_data = json.loads(response)
            result = response_data.get('result')
            print("Result:", result)
            return result
        else:
            print("POST /endpoint: Failed")
            return None
    except Exception as e:
        print("Failed to post data:", e)
        return None

# Example data
data = {"key": "value"}

async def main():
    result = await send_request(data)
    if result:
        print("The computed result is:", result)
    else:
        print("No result could be retrieved.")

# 根据环境选择启动方式
if __name__ == "__main__":
    try:
        # 尝试检测pygbag环境
        import pygbag
        # 处于pygbag环境,提交任务到现有事件循环
        loop = asyncio.get_event_loop()
        loop.create_task(main())
    except ImportError:
        # 本地测试环境,使用asyncio.run启动
        asyncio.run(main())

3. 额外注意事项

  • 确保BASE_URL配置正确,并且API支持CORS(pygbag运行在浏览器中,跨域请求需要服务器允许)
  • 本地测试时如果仍遇事件循环问题(比如交互式环境),可改用以下启动方式:
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())
    
  • RequestHandler的post方法会自动适配Web环境,无需手动处理HTTPS细节,pygbag会在浏览器中调用原生Fetch API完成请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 00:22:04