三秒看懂Python yield

发布时间 2023-06-21 15:16:34作者: anyiya

业务场景:一个FastAPI构建的网关,数据进来时立即给予一次响应,表示:“收到,我已开始执行。”,然后分发任务另起一个线程异步执行。
原本代码写的在异步里又起了一个异步等任务执行,这样不影响下面的return立刻响应。逻辑看起很繁琐,那有没有办法,能让函数在"return":“收到”之后,继续执行呢?这时候题主想到了yield。

以上内容与正题无关。

def test():
    for i in range(2):
        if i == 0:
            a = 'test函数已经开始执行'
        else:
            a = 'test函数已经执行结束'
        yield a
        print("执行中")


g = test() # 一个生成器对象
print('第一次调用:',next(g))
print('='*10)
print('第二次调用:',next(g))

image

我觉得这个demo比网上绝大部分文章更能一眼看懂这个yield是个咋回事。当然,这个用的很浅。