如何集成Python mido和asyncio?

如何集成Python mido和asyncio?,第1张

如何集成Python mido和asyncio?

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

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

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在其后台线程中调用回调时,

asyncfor
在流上迭代的asyncio循环都将唤醒一个新项。有效地
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)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5668499.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存