我正在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”?在