Spyder 如何在同一线程的后台运行 asyncio 事件循环(或者确实如此?)

2024-06-21

我已经研究 asyncio 模块/功能几天了,因为我想将它用于我的应用程序的 IO 绑定部分,并且我认为我现在对它的工作原理有一个合理的理解,或者在至少我认为我已经理解了以下内容;

  1. 任一时刻,任一线程中只能运行一个异步事件循环。
  2. 一旦一切都设置好并准备好,就会调用loop.run_forever()或loop.run_until_complete()来运行循环,并且此调用会永久阻塞线程或直到循环完成,即。同步代码不能(或不应该)与同一线程中的事件循环并行运行。
  3. 如果您需要从事件循环内部运行阻塞/非确定性同步代码,那么您应该在“执行器”内部运行它,它(如果我的理解是正确的)在事件循环内部嵌入一个线程或进程池并运行那里的代码(在它自己的新线程或进程中?)
  4. python 的开发人员从未打算让异步代码和同步代码成为同一应用程序的一部分,因为我绝对找不到任何参考资料来解释如何最好地实现线程间/同步/异步代码间通信。
  5. Asyncio 不是为人类编写的。

考虑到上述考虑,我一直在努力思考如何在后台运行我的异步代码,同时在前台执行其他(同步)工作,我也在谷歌上搜索了很多,并发现很多人有相同的类型问题很多,但提出好的解决方案的人并不多,也没有我满意的解决方案。

所以现在我的问题是; Spyder IDE 是如何做到的???

我正在使用 Spyder IDE,并发现 Spyder 运行自己的异步事件循环,不仅如此,您还可以直接在交互式 python 控制台中定义和运行异步函数,只需执行以下操作:

In [1]: async def my_printer():
   ...:     print('hello world')
   ...:
In [2]: asyncio.run_coroutine_threadsafe(my_printer(), asyncio.get_event_loop())
hello world

所以我心里想“我想知道我在 Spyder 终端中输入的代码实际上是在哪个线程中执行的”,所以我尝试了:

In [3]: import threading
In [4]: threading.current_thread()
<_MainThread(MainThread, started 9756)>

..然后当我尝试时,我的困惑变得更加严重;

In [5]: async def get_thread():
   ...:     return threading.current_thread()
   ...:
In [6]: res = asyncio.run_coroutine_threadsafe(get_thread(), asyncio.get_event_loop())
In [7]: res.result()
<_MainThread(MainThread, started 9756)>

这到底是怎么回事?

我不明白 Spyder 如何在主线程中运行异步事件循环,同时仍然允许我在同一线程中运行同步代码。我的理解是否不正确/我是否遗漏了有关 asyncio 工作原理的信息?或者 Spyder 是否在幕后使用了一些邪恶的黑客手段使其发挥作用?

我对此主要感兴趣,因为我希望它可以帮助我理解同步和异步代码如何协同工作,并且因为它可能会进一步加深我对 asyncio 的理解。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spyder 如何在同一线程的后台运行 asyncio 事件循环(或者确实如此?) 的相关文章

随机推荐

  • React-Native:如何在下载文件时显示进度?

    要求 我想显示一个渐进指示器 显示已完成加载的百分比 我已经使用 fetch 进行 api 服务调用 是否有可能以任何方式获得下载完成的百分比 或者任何第三方库 我已经解决了这个问题 这是我使用的 npmrn 获取 blob https w
  • 大型数据集上的 Sklearn-GMM

    我有一个很大的数据集 我无法将整个数据放入内存中 我想在这个数据集上拟合 GMM 我可以用吗GMM fit sklearn mixture GMM 重复小批量数据 没有理由重复贴合 只需随机采样您认为机器可以在合理时间内计算的尽可能多的数据
  • 如何在 angularjs 中修剪()字符串?

    有角度特定的方法吗 如果没有 我应该使用内置的jquery 来做到这一点吗 如果我应该使用内置的jquery 如何在不使用 的情况下访问trim 函数 或者这是必要的 编辑 是的 我知道 str trim 对不起 我需要这个才能在 IE 8
  • Postman - 如何计算 JSON 响应中特定对象的出现次数

    我是 JSON 和 Postman 的新手 我相信我正在尝试做一些非常简单的事情 我创建了一个 GET 请求 它将获得如下所示的 JSON 响应 在下面的例子中我想得到count响应中所有 IsArchived 属性 这些属性的数量因响应而
  • 使用Beam IO ReadFromPubSub模块时,可以在Python中提取带有属性的消息吗?尚不清楚是否支持

    尝试将具有存储在 PubSub 中的属性的消息拉取到 Beam 管道中 我想知道是否添加了对 Python 的支持 这就是我无法阅读它们的原因 我看到它存在于Java中 pipeline options PipelineOptions pi
  • 如何强制初始化 Hibernate JPA 代理以在 JSON 调用中使用它

    我有一个 Spring 3 JPA 2 0 应用程序 在我的 Controller我需要一个初始化的对象 但我有代理 我需要能够以编程方式初始化它 我需要类似的功能org hibernate Hibernate initialize Obj
  • 对列表中的一系列整数求和

    假设我有一个这样的列表 List
  • 如何向 SCons 构建添加预处理和后处理操作?

    我正在尝试在使用 SCons 构建项目时添加预处理和后处理操作 SConstruct 和 SConscript 文件位于项目的顶部 预处理动作 生成代码 通过调用不同的工具 gt 不知道在此预处理之后将生成的确切文件 可以创建用于决定生成哪
  • 我们可以用java定制一个垃圾收集器吗?

    我们知道java的垃圾收集器是一个低优先级线程 在java中我们可以创建任何具有高优先级的线程 那么是否有可能拥有我们自己定制的具有可变优先级的垃圾收集器线程 我们可以根据内存管理的级别进行设置 有人尝试过吗 如果是的话 您能分享一些关于如
  • 理论上防止 WebSocket 中第一个收到的消息丢失

    服务器端代码发送消息立即地连接打开后 它向客户端发送初始配置 问候语 以下代码是在客户端 var sock new WebSocket url sock addEventListener error processError sock ad
  • 批量插入,asp.net

    我需要获取与会员相对应的 ID 号列表 在任何给定时间处理的数量可能在 10 到 10 000 之间 我可以毫无问题地收集数据 解析数据并将其加载到 DataTable 或任何内容 C 中 但我想在数据库中执行一些操作 将所有这些数据插入表
  • Java 8 Stream - 为什么过滤器方法不执行? [复制]

    这个问题在这里已经有答案了 我正在学习使用java流进行过滤 但是过滤后的流没有打印任何内容 我认为过滤器方法没有被执行 我的过滤代码如下 Stream of d2 a2 b1 b3 c filter s gt s startsWith b
  • Jupyter Notebook:没有名为 pandas 的模块

    我搜索了其他问题 但没有找到任何有帮助的内容 大多数只是建议您使用 conda 或 pip 安装 pandas 在我的 jupyter 笔记本中 我试图导入 pandas import pandas as pd 但我收到以下错误 Modul
  • Meteor.js 登录事件

    因此 我对 Meteor 框架和 JavaScript 总体来说还很陌生 但我正在使用该框架开发一个小项目 以尝试让自己达到标准 基本上我正在开发一个微博客网站 目前 用户可以通过多种服务登录 fb google 等 我通过插入所需 url
  • 如何使用 itextsharp 更改 PDF 公式的按钮图标?

    我目前正在尝试使用 itextsharp 填写预定义的表单 除了添加图像之外 一切正常 这之前已经在 Adob e 的 FDF 工具包中运行过 该工具包已编译为 NET 1 1 这不再适用于 NET 4 0 我改用了 itextsharp
  • 开闭原则背后的含义和推理是什么?

    开放 封闭原则规定软件实体 类 模块等 应该对扩展开放 但对修改关闭 这意味着什么 为什么它是良好的面向对象设计的重要原则 这意味着您应该将新代码放入新的类 模块中 现有代码应仅针对错误修复进行修改 新类可以通过继承重用现有代码 开放 封闭
  • 在 TextView onTextChanged 上设置文本

    我有一个定义为类属性的文本视图 以便我可以在整个类中访问它 在 onCreate 方法中我执行以下操作 chars TextView findViewById R id chars chars setText 300 之后 public v
  • RTCDataChannel发送方法不发送数据

    我的 RTCDataChannel 遇到一个奇怪的问题 我正在对 WebRTC 进行一些研究 并且已经可以进行 WebRTC 音频 视频聊天 现在我想使用 RTCDataChannel 添加文本聊天和文件共享 我已经像这样创建了 RTCDa
  • 如何动态添加XCTestCase

    我正在为一个白标签项目编写 UI 测试 其中每个应用程序都有一组不同的菜单项 测试点击每个菜单项并截取屏幕截图 使用快车道快照 https docs fastlane tools actions snapshot 目前这一切都发生在一个内部
  • Spyder 如何在同一线程的后台运行 asyncio 事件循环(或者确实如此?)

    我已经研究 asyncio 模块 功能几天了 因为我想将它用于我的应用程序的 IO 绑定部分 并且我认为我现在对它的工作原理有一个合理的理解 或者在至少我认为我已经理解了以下内容 任一时刻 任一线程中只能运行一个异步事件循环 一旦一切都设置