SuperAPI AI 工具集

iter-coroutine

编程与开发

查看项目

更新于 10-16 05:53

技能介绍

用途:消除 vercel-py 中同步与异步模块的重复逻辑。适用于同一模块存在并行 sync/async 实现且逻辑重复、需同时提供两种公共 API,或改用共享 HTTP 传输层进行内部重构的场景。公共 API 保持稳定,迁移属内部重构,不改变导出名、签名、返回类型与行为。

主要能力:核心逻辑异步优先,共享业务逻辑放在基类的 async 方法中;同步入口用 iter_coroutine(...) 作为薄封装,仅适用于同步模式下不会挂起的协程;HTTP 请求统一经由 vercel._internal.http 传输层,不在功能模块中直接构造 httpx.Client 或 httpx.AsyncClient。

使用方式:iter_coroutine 对协程只推进一步,若未挂起则从 StopIteration 取出返回值,若尝试 yield/await 则抛出 RuntimeError。迁移步骤为:先创建传输无关的请求客户端(包装 BaseTransport,暴露异步 API),再编写共享基类客户端,然后增加同步/异步具体客户端,最后接线公共 API 函数。同步/异步差异较大时做 base/runtime 拆分,同步运行时用 ThreadPoolExecutor,异步运行时用 anyio 任务组,基类以多态方式调用运行时。回调可用 inspect.isawaitable() 判断,同步客户端 await_callback=False,异步客户端为 True。

限制:iter_coroutine 仅适用于不挂起的协程;真实 I/O、asyncio.sleep、asyncio.create_task、对用户回调无保护的 await 均不安全。测试建议用 respx 做集成式测试,验证真实请求流程与同步/异步一致性,每次操作需分别测试两条路径。提交前可运行 ./scripts/lint.sh 与 ./scripts/test.sh。参考实现位于 blob 模块的 transport.py、core.py、multipart.py、blob/ops.py 与 blob/types.py。

其它:本技能所属平台、收费、价格、可用版本等信息暂未提供。