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

Python异步方法加同步装饰器后返回None的问题排查与修复

问题根因
  • 自定义的async_loop装饰器的包装函数没有返回异步执行的结果:asyncio.loop.run_until_complete()方法执行协程时,会将协程函数的返回值作为自身的返回值回传,但你当前的decorated函数仅调用了该方法,没有将结果返回给调用方,因此外部调用tracking方法时只能拿到Python函数默认的返回值None。
  • 额外存在资源泄漏隐患:auth方法中重复创建了两次aiohttp.ClientSession实例,第一次创建的会话没有被主动关闭,程序退出时会触发资源警告。
修复方案

1. 修改装饰器逻辑,透传返回值

将async_loop装饰器调整为如下代码,新增return语句返回异步执行结果:

def async_loop(f):
    def decorated(self, *args, **kwargs):
        return self.loop.run_until_complete(f(self, *args, **kwargs))
    return decorated

2. (可选)优化会话管理逻辑

新增析构方法主动关闭会话,避免资源泄漏:

class Yodel:
    # 原有代码保持不变
    def __del__(self):
        if not self.session.closed:
            self.loop.run_until_complete(self.session.close())

修改完成后再次调用tracking方法即可拿到正确的查询结果列表。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:54:01