如何集成 Python mido 和 asyncio?

2023-11-28

我有一个通过 MIDI 进行文件 I/O 的设备。我有一个使用 Mido 来下载文件的脚本,但它是一堆全局变量。我想整理它以正确使用 asyncio,但我不确定如何集成 mido 回调。我认为文档说我应该使用 Future 对象,但我不确定 mido 回调函数如何获取该对象。


mido提供了一个基于回调的API将从不同的线程调用回调。您的回调实现可以通过调用与 asyncio 通信loop.call_soon_threadsafe。请注意,您将无法仅设置 a 的值Future因为回调将被多次调用,而 future 只能设置一次 - 它适用于一次性计算。

多次调用回调的常见模式是将事件推送到 asyncioqueue并在异步代码中从中弹出内容。通过将队列公开为异步迭代器,可以使这变得更加方便。此功能使该过程自动化:

def make_stream():
    loop = asyncio.get_event_loop()
    queue = asyncio.Queue()
    def callback(message):
        loop.call_soon_threadsafe(queue.put_nowait, message)
    async def stream():
        while True:
            yield await queue.get()
    return callback, stream()

make_stream返回两个对象:

  • a callback,您可以传递给mido.open_input()
  • 一个流,您可以使用它进行迭代async for获取新消息

每当 mido 在其后台线程中调用回调时,您的 asyncioasync for流上的循环迭代将被一个新项目唤醒。有效地,make_stream将线程回调转换为异步迭代器。例如(未经测试):

async def print_messages():
    # create a callback/stream pair and pass callback to mido
    cb, stream = make_stream()
    mido.open_input(callback=cb)

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

如何集成 Python mido 和 asyncio? 的相关文章

  • 翠儿。让流永远运行

    我对 tweepy python 库比较陌生 我想确保我的流 python 脚本始终在远程服务器上运行 因此 如果有人能够分享如何实现这一目标的最佳实践 那就太好了 现在我正在这样做 if name main while True try
  • 将tensorflow 2.0 BatchDataset转换为numpy数组

    我有这个代码 train images test images tf keras datasets mnist load data train dataset tf data Dataset from tensor slices train
  • on_delete=models.PROTECT 和 on_delete=models.CASCADE 在 Django 模型上有什么作用?

    我对 Django 很熟悉 但最近注意到有一个on delete models CASCADE and on delete models PROTECT模型的选项 on delete models CASCADE and on delete
  • python - 是否可以扩展 xml-rpc 可以序列化的事物集?

    我看到几个问题询问如何发送numpy ndarray通过 xml rpc 调用 这不能开箱即用 因为正如 xml rpc 中所述docs https docs python org 2 library xmlrpclib html 有一组固
  • python 中分割字符串以获得一个值?

    需要帮助 假设我在名为 input 的变量中有一个字符串 Sam Person name kind input split 通过执行上述操作 我得到两个具有不同字符串 Sam 和 Person 的变量 有没有办法只获取第一个值 name S
  • 可以在 TensorFlow 中使用排名相关作为成本函数吗?

    我正在处理偶尔充满异常值的极其嘈杂的数据 因此我主要依靠相关性来衡量我的神经网络的准确性 是否可以明确使用诸如等级相关性 斯皮尔曼相关系数 之类的东西作为我的成本函数 到目前为止 我主要依赖 MSE 作为相关性的代理 我现在面临三个主要障碍
  • 优化 Keras 以使用所有可用的 CPU 资源

    好吧 我真的不知道我在说什么 所以请耐心听我说 我正在使用 Theano 后端运行 Keras 以在 MNIST 图像上运行基本的神经网络 目前只是一个教程 过去 我一直使用我的旧 HP 笔记本电脑 因为我有 Windows 和 Ubunt
  • Python - 用逗号分割,跳过括号内的内容

    我需要用逗号分隔字符串 但我对这种情况有一个问题 TEXT EXAMPLE THIS IS A EXAMPLE BUT NOT WORKS FOR ME SECOND THIRD 我想拆分并得到 var 0 TEXT EXAMPLE THI
  • Pandas重置索引未生效[重复]

    这个问题在这里已经有答案了 我不确定我在哪里误入歧途 但我似乎无法重置数据帧上的索引 当我跑步时test head 我得到以下输出 正如您所看到的 数据帧是一个切片 因此索引超出范围 我想做的是重置该数据帧的索引 所以我跑test rese
  • 错误:permission_manager_qt.cpp(82) 不支持的权限类型:13

    我正在开发具有内置浏览器功能的 python 代码 PyQt 5 13 import sys from PyQt5 QtCore import from PyQt5 QtGui import from PyQt5 QtWidgets imp
  • 如何使用 python urllib 在 HTTP/1.1 中保持活力

    现在我正在这样做 Python3 urllib url someurl headers HOST somehost Connection keep alive Accept Encoding gzip deflate opener urll
  • 创建一个类似于 Tkinter 的表

    我希望创建类似于 Tkinter 中的表格的东西 但它不一定是这样的 例如 我想创建标题 Name1 Name2 Value 并在每个标题下面有几个空白行 然后 我希望稍后用我计算的值或名称的字符串值填充这些行 因此是标签 对于 Name2
  • 在径向(树)网络x图中查找末端节点(叶节点)

    给定下图 是否有一种方便的方法来仅获取末端节点 我所说的端节点是指那些具有一个连接边的到节点 我认为这些有时被称为叶节点 G nx DiGraph fromnodes 0 1 1 1 1 1 2 3 4 5 5 5 7 8 9 10 ton
  • 如何通过双击在浏览器中打开 ipynb 文件

    以前 我安装了 Canopy 当时 我只需双击 ipynb 文件并在浏览器中打开它们即可 但是 后来我需要Anaconda 一旦我安装了它 这个功能就没有了 现在我只希望能够简单地双击 ipynb 文件 然后该文件就会在 Firefox 中
  • Matplotlib Scatter - ValueError:RGBA 序列的长度应为 3 或 4

    我正在尝试为我的功能绘制图表 但不断收到此错误 ValueError RGBA sequence should have length 3 or 4 每当我只有 6 种形状时 代码就可以完美运行 但现在我将其增加到 10 种 它就不起作用了
  • Scipy 稀疏 Cumsum

    假设我有一个scipy sparse csr matrix代表下面的值 0 0 1 2 0 3 0 4 1 0 0 2 0 3 4 0 我想就地计算非零值的累积和 这会将数组更改为 0 0 1 3 0 6 0 10 1 0 0 3 0 6
  • 张量流:注册 numpy bfloat16 扩展

    正如我所见 tensorflow 中有 bfloat16 的 numpy 扩展 https github com tensorflow tensorflow blob 24ffe9f729160a095a5cab8f592392018280
  • 全局变量是 None 而不是实例 - Python

    我正在处理Python 中的全局变量 代码应该可以正常工作 但是有一个问题 我必须使用全局变量作为类的实例Back 当我运行应用程序时 它说 back is None 这应该不是真的 因为第二行setup 功能 back Back Back
  • 如何将列表字典写入字符串而不是 CSV 文件?

    This 堆栈溢出问题 https stackoverflow com questions 37997085 how to write a dictionary of lists to a csv file将列表字典写入 CSV 文件的答案
  • 在 Python 模块中使用 InstaLoader

    我正在尝试使用 Instaloader 下载与主题标签相关的照片以进行图像分析 我在GitHub存储库中找到了一个全面的方法 如何在终端中执行它 但是 我需要将脚本集成到Python笔记本中 这是脚本 instaloader no vide

随机推荐

  • 防止循环连接、递归搜索

    所以在我的情况下我有三个表 list item and list relation Each item将通过以下方式链接到一个列表list id外键 the list relation看起来像这样 CREATE TABLE list rel
  • 当dispatch_async任务完成时我如何收到通知?

    我有一个像这样的异步任务 dispatch async dispatch get main queue myAsyncMethodsHere 有没有办法在后台任务完成时收到通知 或者在完成后调用一个方法 我已通读文档并研究了dispatch
  • Android studio Gradle 找不到方法compile()

    在过去的两天里 我试图找到解决这个问题的方法 但没有成功 我正在尝试包括GSON库 进入我的android项目 这是我的文件夹结构的图片 现在在我的 build gradle 中我有以下内容 Top level build file whe
  • 如何发出错误以便可以在客户端的错误处理程序上捕获它?

    我需要在连接处理程序中发出错误并在客户端捕获它 如下所示 服务器端 var http require http var sio require socket io var app require express var server req
  • 批量编写实时进度条

    我想使用实时进度条 它会随着代码的编写 安装或加载文件而更新 Example echo off main echo Updating file PROGRESS BAR HERE PROGRESS BAR HERE 表示我想要放置实时进度条
  • 选择日期/时间范围内的数据

    如何在 MySQL 中选择日期范围内的数据 我的datetime列采用 24 小时祖鲁时间格式 select from hockey stats where game date between 11 3 2012 00 00 00 and
  • 如何更改 kubernetes 节点的名称

    我在 kubernetes 集群中有一个正在运行的节点 有什么办法可以更改它的名称吗 我已经尝试过 使用 kubectl delete 删除节点 更改节点清单中的名称 将节点添加回来 但节点不会启动 有人知道应该怎么做吗 Thanks 通常
  • 数组 [] 括号内的 static 关键字[重复]

    这个问题在这里已经有答案了 我最近发现了新的用法static关键词 什么是static意思是这里 void fun int some array static 7 EDIT 有人能举个例子吗 该标准在6 7 6 3中规定 将参数声明为 类型
  • ASP.NET MVC Bootstrap 动态模式内容

    我正在使用 MVC 5 并且我有一个
  • MongoDB 全文搜索 vs Lucene? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 目前 MongoDB 的全文搜索与 Lucene 相比如何 提出这个问题的原因是由于我不确定 a 在生产中使用 mongo 的 FTS 实现 因为大约 6 个月前它仍处于测试阶段 and
  • SOAP 和 REST Web 服务有什么区别? SOAP 可以是 RESTful 的吗?

    来自 MSDN 杂志https msdn microsoft com en us magazine dd315413 aspx and https msdn microsoft com en us magazine dd942839 asp
  • 组织功能文件的最佳方式是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我尚未解决的一个挑战是以某种方式组织我的功能文件和场景 这样可以轻松地在 Specflow 和 BDD 中导航和探索 想象一下一年后有人想要来了解这
  • GCP PubSub:通过 CURL 类型的请求发布消息

    有没有人有一个工作示例 说明如何直接从 shell 通过 CURL 类型的命令将消息发布到 GCP PubSub 主题 我试图不使用 CLI 也不使用客户端库 而且我对 OAUTH 的东西很感兴趣 我很高兴能有一个在 Linux 上运行的
  • 如何创建特定 TFS 2010 源代码管理路径的资源管理器快捷方式

    我们正在慢慢地将项目从旧的基于文件的存储 不要问 转移到 tfs 我们的编码员仍然习惯在文件系统中查找代码 由于我们正在讨论 100 个项目 每个项目都有一定的历史 因此我们必须小心地逐个移动它们 因此 我们将不得不在一段时间内将现有的文件
  • 是否可以从 Golang 中的父结构调用重写的方法?

    我想实现这样的代码 其中B继承自A并且只重写A的Foo 方法 并且我希望代码打印B Foo 但它仍然打印A Foo 看来接收者在Golang在C 中不能这样工作 当启用动态绑定时 代码可以像我想要的那样工作 我还发布了另一段代码 它可以工作
  • 如何在 Maven 中将多个 OpenAPI 3.0 规范文件合并为一个?

    在使用 Spring Boot 的 Maven 项目中 有多个 OpenAPI 3 0 规范文件 一个规范定义了所有 HTTP 错误 errors yml 并且 error yml 的组件在其他规范中引用 我想生成一个输出规范 其中包含 e
  • 如何使用服务器时间在 Firestore 中设置纪元

    我正在尝试设置在 Firestore 中创建数据时的纪元 我希望使用以下命令获得与实时数据库中所做的类似的结果ServerValue TIMESTAMP 我不想使用设备时间来设置它System getCurrentMillis因为该时间可以
  • 编译器抱怨“错误:程序中存在杂散'\240'”[重复]

    这个问题在这里已经有答案了 我需要实现以下功能 void calc double a double b int r int c double f double 参数a r c和f是输入 b是输出 a 和 b 是具有 r 行和 c 行的二维矩
  • 如何以 ArrayList 形式检索 JDBC 结果集?

    我正在执行一个查询来检索大量 ID 整数 有没有某种方法可以简单地以 ArrayList 形式检索所有内容 而不是在 ResultSet 中迭代数百万次并将所有内容一一复制到 ArrayList 中 我知道 ResultSet 应该被迭代
  • 如何集成 Python mido 和 asyncio?

    我有一个通过 MIDI 进行文件 I O 的设备 我有一个使用 Mido 来下载文件的脚本 但它是一堆全局变量 我想整理它以正确使用 asyncio 但我不确定如何集成 mido 回调 我认为文档说我应该使用 Future 对象 但我不确定