【发布时间】:2020-12-31 11:15:30
【问题描述】:
我来自 .NET 背景,但我注意到 asyncio 的行为与 .NET 中的 async 和 await 不同:
我正在努力实现以下目标:
- 启动一项计算任务 (
a) - 启动一个等待用户输入退出的任务 (
b) - 等待任务
b(用户已退出) - 取消任务
a
以下根本不执行任务a:
processing = asyncio.create_task(do_processing())
user_finished = asyncio.create_task(stdin_listener())
await user_finished
processing.cancel()
我理解的原因是因为从未等待processing,但是如果我等待此任务,它将永远不会返回,因为它永远不会到达cancel()。
我浏览了文档,但找不到这个简单的示例,或者无法将其拼凑在一起。只是对这个API不熟悉,请赐教。
编辑: 我发现上面的任务处理是正确的。但是,在方法@987654332@ 中,我调用了:
input("Press Q to quit\n")
这是阻塞的。我将研究此调用的其他方法。
【问题讨论】:
-
没有看到
do_processing和stdin_listener很难提供有意义的帮助,但我的猜测是后者不会等待任何返回事件循环的东西,所以前者永远没有机会开始。 -
好的,太好了。是的,这是有道理的。谢谢你的解释。
标签: python python-3.x python-asyncio