python-使用yield from时协程在哪个事件循环中运行?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-使用yield from时协程在哪个事件循环中运行?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1324字,纯文字阅读大概需要2分钟。
内容图文
![python-使用yield from时协程在哪个事件循环中运行?](/upload/InfoBanner/zyjiaocheng/665/8b27d5376b784b1d83174fb1c2a34055.jpg)
当我在couroutine foo中从some_coroutine()中调用yield时,some_coroutine是否在与foo当前正在运行的相同的偶数循环中进行调度?一个例子:
async def foo():
yield from asyncio.sleep(5)
loop = asyncio.get_event_loop() # this could also be a custom event loop
loop.run_until_completed(foo())
在此示例中,将在哪个事件循环中安排睡眠时间?我对循环不是默认事件循环的情况特别感兴趣.
documentation,在“协程可以做的事情”下说:
result = await coroutine
orresult = yield from coroutine
– wait for
another coroutine to produce a result (or raise an exception, which
will be propagated). Thecoroutine
expression must be a call to
another coroutine.
我不清楚协程将在哪个循环中进行调度.
解决方法:
get_event_loop的引用文档
Get the event loop for the current context.
default loop的实现(准确地说是事件循环默认策略):
The default policy defines context as the current thread, and manages an event loop per thread that interacts with asyncio.
>事件循环在线程中运行,并在同一线程中执行所有回调和任务(docs),
> asyncio.get_event_loop为相同的线程返回相同的循环,
>如果您未明确安排其他线程的循环/与之交互,它将使用默认(*)循环
在您的示例中:
> get_event_loop返回当前线程的事件循环,
> foo被安排在具有run_until_completed的循环上
>任何其他异步调用(从中唤醒/产生)都安排在同一循环中
有关更多信息,请访问Concurrency and multithreading.
(*)您称为default的事件循环实际上是当前线程的循环.
内容总结
以上是互联网集市为您收集整理的python-使用yield from时协程在哪个事件循环中运行?全部内容,希望文章能够帮你解决python-使用yield from时协程在哪个事件循环中运行?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。