How can I integrate Python mido and asyncio?(如何集成Python Mido和Asyncio?)
本文介绍了如何集成Python Mido和Asyncio?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一台通过MIDI执行文件I/O的设备。我有一个使用Mido下载文件的脚本,但它是一堆全局变量。我想整理一下,以便正确使用Asyncio,但是我不确定如何集成Mido回调。我想文档说我应该使用Future对象,但我不确定Mido回调函数如何获得该对象。
推荐答案
mido
提供了一个callback-based接口,该接口将从不同的线程调用回调。您的回调实现可以通过调用loop.call_soon_threadsafe
与异步通信。请注意,您不能只设置Future
的值,因为回调将被多次调用,而未来只能设置一次-它用于一次性计算。
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
返回两个对象:
- 回调,可以传递给
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)
这篇关于如何集成Python Mido和Asyncio?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何集成Python Mido和Asyncio?


猜你喜欢
- pytorch 中的自适应池是如何工作的? 2022-07-12
- 如何在 Python 的元组列表中对每个元组中的第一个值求和? 2022-01-01
- 沿轴计算直方图 2022-01-01
- python check_output 失败,退出状态为 1,但 Popen 适用于相同的命令 2022-01-01
- 分析异常:路径不存在:dbfs:/databricks/python/lib/python3.7/site-packages/sampleFolder/data; 2022-01-01
- 使用Heroku上托管的Selenium登录Instagram时,找不到元素';用户名'; 2022-01-01
- python-m http.server 443--使用SSL? 2022-01-01
- 如何在 python3 中将 OrderedDict 转换为常规字典 2022-01-01
- 如何将一个类的函数分成多个文件? 2022-01-01
- padding='same' 转换为 PyTorch padding=# 2022-01-01