python await asyncio.sleep()in while true blocks

时间:2018-04-09 08:35:42

标签: python while-loop python-asyncio git-bash

我有以下python程序测试asyncio

import asyncio

async def task():
    print("doing task")
    while True:
        print("while true looping")
        await asyncio.sleep(2)

def main():
    loop = asyncio.get_event_loop()
    try:
        print("starting loop")
        loop.run_until_complete(
            asyncio.gather(
                task()
            )
        )
    finally:
        loop.close()

if __name__ == '__main__':
    main()

我期待如下输出:

starting loop
doing task
while true loop
while true loop
...("while true loop every" 2 seconds)

甚至:

doing task
while true loop
starting loop
while true loop
...("while true loop every" 2 seconds)

但相反,该程序挂起并输出任何内容。我想我误解了asyncio处理循环或asyncio.sleep()的方式,但我认为await asyncio.sleep()将控制权传递给调用者,因此另一个print()可以执行。< / p>

我在这里遇到了什么问题,如何获得所需的输出?

编辑:这似乎是Windows上Git-Bash特有的一个问题,当我使用Windows命令提示符和powershell尝试该程序时,显示了所需的输出。

0 个答案:

没有答案