您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何集成Python mido和asyncio?

如何集成Python mido和asyncio?

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

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

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在其后台线程中调用回调时,async for在流上迭代的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)
python 2022/1/1 18:51:55 有318人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶