Python 异步IO的结果不符合预期

Python 异步IO的结果不符合预期,python,python-3.x,asynchronous,python-asyncio,Python,Python 3.x,Asynchronous,Python Asyncio,我正在学习asyncio库来完成一些我想完成的任务。我编写以下代码是为了教会自己如何在执行原始任务时切换到其他任务。正如您在下面看到的,应该执行求和(),直到满足一个条件,它应该跳转到第二个任务()。在secondaryTask()完成后,它应该返回到summation()希望它能完成的地方。潜在结果应为sum=1225和mul=24 import asyncio, time async def summation(): print('Running summation from 0

我正在学习
asyncio
库来完成一些我想完成的任务。我编写以下代码是为了教会自己如何在执行原始任务时切换到其他任务。正如您在下面看到的,应该执行
求和()
,直到满足一个条件,它应该跳转到
第二个任务()
。在
secondaryTask()
完成后,它应该返回到
summation()
希望它能完成的地方。潜在结果应为
sum=1225
mul=24

import asyncio, time


async def summation():
    print('Running summation from 0 to 50:')
    sum = 0
    for i in range(25):
        sum = sum + i
        if i != 25:
            time.sleep(0.1)
        else:
            await asyncio.sleep(0) # pretend to be non-blocking work (Jump to the next task)
    print('This message is shown because summation() is completed! sum= %d' % sum)


async def secondaryTask():
    print('Do some secondaryTask here while summation() is on progress')
    mul = 1
    for i in range(1, 5):
        mul = mul * i
        time.sleep(0.1)
    await asyncio.sleep(0)
    print('This message is shown because secondaryTask() is completed! Mul= %d' % mul)

t0 = time.time()
ioloop = asyncio.get_event_loop()
tasks = [ioloop.create_task(summation()), ioloop.create_task(secondaryTask())]
wait_tasks = asyncio.wait(tasks)
ioloop.run_until_complete(wait_tasks)
ioloop.close()
t1 = time.time()
print('Total time= %.3f' % (t1-t0))
由于与be
sum=1225
相反,
sum=300
此代码无法按预期执行。显然,
summation()
在处理
secondaryTask()
时不会继续。如何修改
summation()
,以便能够在后台对剩余的25个值进行求和


谢谢你,只是你的粗心。如果要在0到50之间运行
summation
,则
summation
函数应该是
for i in range(50)

Python range是end exclusive,因此
i!=25
将始终计算为真;你可能是想写
i!=24
,或者简单地将最后的
wait
放在循环之后。即使修复了这个问题,也不清楚您认为最终的
asyncio.sleep(0)
将实现什么。由于
summation
有25次迭代,每次0.1秒,
secondary task
只有4次迭代,每次0.1秒,
secondary task
将在
summation()结束时完成。另外,既然它们没有共享状态,为什么您希望其他任务影响
summation
打印的总和?哦,我很抱歉!我没注意到。我有点累了,看不到这个小错误。