首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Asyncio意外输出

Asyncio意外输出
EN

Stack Overflow用户
提问于 2019-05-05 03:26:35
回答 1查看 36关注 0票数 0

我刚刚开始学习python asyncio,下面是我的简单代码:

代码语言:javascript
复制
import asyncio
import time

loop = asyncio.get_event_loop()

async def hello():
    print("Hello")
    await asyncio.sleep(2)
    print("World")

async def main():
    for _ in range(10):
        asyncio.ensure_future(hello())

start_time = time.time()
loop.run_until_complete(main())
duration = time.time() - start_time
print(duration)

但是结果是这样的:

代码语言:javascript
复制
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
0.007950782775878906

为什么不打印"World"?

EN

回答 1

Stack Overflow用户

发布于 2019-05-05 03:45:43

您需要等待对hello的调用结果,以确保函数hello的整个主体都被执行。call loop.run_until_complete(main())会运行事件循环,直到main完成,但是,您的代码并不要求对hello的调用必须在main完成之前完成。您需要显式地使main的终止依赖于对hello的所有调用的终止。

您可以像这样使用asyncio.gather实现所需的行为:

代码语言:javascript
复制
import asyncio
import time

loop = asyncio.get_event_loop()

async def hello():
    print("Hello")
    await asyncio.sleep(2)
    print("World")

async def main():
    tasks = []
    for _ in range(10):
      tasks.append(asyncio.ensure_future(hello()))
    await asyncio.gather(*tasks)

start_time = time.time()
loop.run_until_complete(main())
duration = time.time() - start_time
print(duration)

这会产生:

代码语言:javascript
复制
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
World
World
World
World
World
World
World
World
World
World
2.097428560256958
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55986092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档