python事件循环如何驱动协程_在协程链结期间,await如何将控制权交还给事件循环?...

我正在python3.6中尝试asyncio,但很难弄清楚这段代码的行为方式。在

示例代码:import asyncio

async def compute_sum(x, y):

print("Compute %s + %s ..." % (x, y))

await asyncio.sleep(5)

print("Returning sum")

return x + y

async def compute_product(x, y):

print("Compute %s x %s ..." % (x, y))

print("Returning product")

return x * y

async def print_computation(x, y):

result_sum = await compute_sum(x, y)

result_product = await compute_product(x, y)

print("%s + %s = %s" % (x, y, result_sum))

print("%s * %s = %s" % (x, y, result_product))

loop = asyncio.get_event_loop()

loop.run_until_complete(print_computation(1, 2))

输出:

^{pr2}$

预期输出:Compute 1 + 2 ...

Compute 1 x 2 ...

Returning product

Returning sum

1 + 2 = 3

1 * 2 = 2

我对预期输出的推理:

虽然compute_sum协程是在compute_product协同例程之前正确调用的,但我的理解是,一旦我们命中await asyncio.sleep(5),控制将被传递回事件循环,该循环将开始执行compute_product协程。为什么在我们在compute_product协程中命中print语句之前执行“Returning sum”?在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值