- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在浏览 asyncio
的 Python 文档我想知道为什么大多数示例都使用 loop.run_until_complete()
而不是 Asyncio.ensure_future()
.
例如:https://docs.python.org/dev/library/asyncio-task.html
好像ensure_future
将是展示非阻塞函数优势的更好方式。 run_until_complete
另一方面,像同步函数一样阻塞循环。
这让我觉得我应该使用 run_until_complete
而不是 ensure_future
的组合与 loop.run_forever()
同时运行多个协程。
最佳答案
run_until_complete
用于运行 future 直到它完成。它将阻止其后代码的执行。但是,它确实会导致事件循环运行。任何已安排的 future 都将运行,直到 future 传递到 run_until_complete
已经完成了。
鉴于这个例子:
import asyncio
async def do_io():
print('io start')
await asyncio.sleep(5)
print('io end')
async def do_other_things():
print('doing other things')
loop = asyncio.get_event_loop()
loop.run_until_complete(do_io())
loop.run_until_complete(do_other_things())
loop.close()
do_io
会跑。完成后,
do_other_things
会跑。您的输出将是:
io start
io end
doing other things
do_other_things
在运行之前使用事件循环
do_io
, 控制将从
do_io
切换至
do_other_things
当前者等待。
loop.create_task(do_other_things())
loop.run_until_complete(do_io())
doing other things
io start
io end
do_other_things
之前预定
do_io
.有很多不同的方法可以获得相同的输出,但哪种方法有意义实际上取决于您的应用程序实际执行的操作。所以我将把它留给读者作为练习。
关于python-3.x - 为什么大多数 asyncio 示例都使用 loop.run_until_complete()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40143289/
我正在以非常基本的方式为应用程序使用 asyncio。查看互联网上的大多数教程(甚至是官方文档),我发现他们使用了 get_event_loop() 和 loop.run_until_complete
首先,我运行了这样的代码,并且重试工作正常。 # -*- coding:utf-8 -*- from retrying import retry import asyncio import time
假设我的任务是将 Flask 项目迁移到异步 Python 网络服务器。我正在寻找模式以尽量减少这里的工作量。在我看来,或多或少,不可能将同步网络服务器逐步移植到异步网络服务器中。这让我觉得我误解了异
此代码失败: import asyncio from motor import motor_asyncio _client = motor_asyncio.AsyncIOMotorClient() _
在下面的代码中: loop = asyncio.get_event_loop() l_x = map(async_func, data_x) l_y = map(async_func, data_y)
我正在浏览 asyncio 的 Python 文档我想知道为什么大多数示例都使用 loop.run_until_complete()而不是 Asyncio.ensure_future() . 例如:h
我正在尝试合并 TCP echo client and server使用 ProcessPoolExecutor() 将自动化测试到单个模块中,它按预期工作。 唯一的问题是我无法完成事件循环。我可以看
出于某种原因,该程序打印出以下警告: Task exception was never retrieved future: exception=SystemExit(2,)> 即使异常被清楚地检索和
我有一个可能是无用的问题,但尽管如此,我还是觉得我错过了一些对于理解 asyncio 的工作方式可能很重要的东西。 我刚刚开始熟悉 asyncio 并编写了这段非常基本的代码: import asyn
我是一名优秀的程序员,十分优秀!