当前位置: 首页 > 面试题库 >

如何集成Python mido和asyncio?

濮波
2023-03-14
问题内容

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


问题答案:

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.open_input()
  • 流,您可以对其进行迭代async for以获取新消息

每当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)


 类似资料:
  • 问题内容: 我最近一直在四处寻找,以找到一种在nodeJS和PHP之间进行通信的好方法。这里是一个想法:nodeJS还是一个很新的东西,仅使用它开发一个完整的应用程序可能有点棘手。而且,您可能只需要项目的一个模块(例如实时通知,聊天等),就可以使用PHP来管理所有其他内容,因为它可能对您来说更容易(而且您可以利用现有框架,例如CodeIgniter或Symfony)。 我想有一个简单的解决方案;

  • 本文向大家介绍如何集成 Spring Boot 和 ActiveMQ?相关面试题,主要包含被问及如何集成 Spring Boot 和 ActiveMQ?时的应答技巧和注意事项,需要的朋友参考一下 对于集成 Spring Boot 和 ActiveMQ,我们使用 spring-boot-starter-activemq 依赖关系。 它只需要很少的配置,并且不需要样板代码。

  • 我最近一直在寻找一种在nodeJS和PHP之间进行通信的好方法。这里有一个想法:nodeJS仍然是相当新的,仅仅用它开发一个完整的应用程序可能有点棘手。此外,您可能只需要用于项目的一个模块,如实时通知、聊天等,而您希望用PHP管理所有其他内容,因为它对您来说可能更容易(而且您可以利用现有的框架,如CodeIgniter或Symfony)。

  • 如何集成Spring和JSF?我跟踪了Spring文档(关于这个主题的文档很少),并搜索了更多文档,目前我发现了两种工作方式: 我将使用@managedbean,JSF作用域工作,但我不能使用@autowired,这个bean必须包含setter,我不确定这是否是最佳实践: 其它的呢?

  • 我对此进行了研究,发现了许多集成CKEditor的方法,但我在集成CKFinder时遇到了问题。我的网站是由其他人创建的,但我觉得我可以自己集成这个。 该网站包含文章,我有一个使用CKEditor的“视图”。它工作得很好,但我无法将图像上传到服务器或浏览服务器图像以在CKEditor中插入照片。因此,我无法在文章文本中添加照片。我希望CKFinder能解决这个问题。 我已经上传了CKFinder文

  • 我有一些用akka写的演员,我想通过ServiceMix让他们互动。很难,我对这些技术是如何交互的有点困惑。这是我目前所理解的: < li>akka让我写一些演员: < ul > < li >生产者发送消息 < li >消费者接收消息 < li >发送和接收的非类型化编辑器 每个参与者将在一个固定的endpoint上可用,在ServiceMix中定义为route 现在我的问题是: 谁自动在jett

  • null 如何在transform()步骤中添加Jaxb2Marshaller?

  • 问题内容: 我正在从Coursera学习Python。在本课程中,他们使用 CodeSkulptor 上的SimpleGUI模块。谁能告诉我如何将SimpleGUI与python 2.7和3.0 shell集成在一起? 问题答案: 来自Darren Gallagher的Coursera论坛 从CodeSkulptor文档中: http://www.codeskulptor.org/docs.htm