python - run_until_complete 和 ensure_future 之间的 Python 关系
问题描述
这是此问题的后续问题:
为什么大多数 asyncio 示例都使用 loop.run_until_complete()?
我试图弄清楚异步编程在 python 中是如何工作的。有一些非常基本的东西我仍然不确定..
当有这行代码: 时asyncio.ensure_future(someTask)
,这行 ALONE 实际上会将Future
默认事件循环中返回的内容排入队列并启动任务吗?或者我是否还需要在此之前调用loop.run_until_complete(someTask)
(或其他类型的运行)才能启动和运行事件循环?
解决方案
asyncio.ensure_future(someTask)
这行 ALONE 是否会真正将默认事件循环中返回的 Future 排入队列并启动任务?
它将调度协程,但不会运行它。您仍然需要运行循环来执行此操作。你可以这样做
loop.run_forever()
如果您希望循环运行直到someTask
完成而不是永远运行,请使用
future = asyncio.ensure_future(someTask)
loop.run_until_complete(future)
不要同时打电话asyncio.ensure_future(someTask)
,loop.run_until_complete(someTask)
否则你最终会得到一个RuntimeError
因为someTask
已经安排好了。
推荐阅读
- facebook - Facebook Messenger 回发按钮不发送有效负载
- java - 部署时 h2o MOJO 与 POJO 之间的性能差异
- powershell - $FolderBrowser.ShowDialog() 并自动选择回车
- c# - 在C#中的模式之后获取子字符串
- gulp - 使用 gulp-if 有条件地使用函数
- excel - 对 D 列求和直到满足条件,在目标列中返回 A 列值
- angular - 无限循环上的Angular 5 Material Custom Theme
- javascript - 检测 ios11 设备是否处于低功耗模式以防止正常正确自动播放视频时出现不良 UX
- mysql - 加载数据文件不影响任何行
- tensorflow - TensorFlow-gpu 仅使用 CPU