【发布时间】:2021-06-02 06:45:09
【问题描述】:
我一直在探索异步在 Python 中是如何工作的。到目前为止,我已经制作了一些简单的基于 MQTT 的异步迷你服务(获取消息、执行某些操作、可能检索某些内容、发送消息)。
对于我的下一个迷你项目,我正在尝试将 Discord 和 MQTT 结合在一起。目标是让不和谐消息出现在 MQTT 上,而 mqtt 消息出现在不和谐上。我有一个异步discord-client 对象和一个异步mqtt-client 对象。两者都可以正常工作,但连接它们有点问题。
我目前的方法是让 Discord 对象成为“领先”对象,而我将 MQTT 对象放在 Discord 对象中(discord-client.mqtt-client = mqtt-client,这意味着我可以做await self.mqtt-client.publish() 之类的事情。到目前为止,这似乎可行。
我的问题是这种方法感觉有点不对劲。这是正常的做法吗?还有其他方法吗?
【问题讨论】:
-
连接两个客户的目标是什么?最终目标是什么?提出具体问题会让其他人更容易提供帮助。
-
忘了说,抱歉。目标是将消息从 discord 推送到 mqtt,反之亦然。
-
这听起来对
asyncio.Queue很有用。 -
这个问题在这一点上似乎无法回答。一方面,它要求基于非常少的细节进行某种设计审查(这本身超出了 StackOverflow 的范围)。也不清楚当前的解决方案是否由于技术问题“感觉错误”,例如可能无法处理的角落案例,或者由于设计气味一切正常,但你觉得比如不同的设计可能会提高代码的清晰度/可维护性。
-
@dirn:我好像完全错过了
asyncio.Queue,谢谢指出!它确实使代码和图表的设计更加清晰;我现在有两个单独的对象,而不是两个对象,一个包含另一个对象,两个对象都有两个Queue对象。 @user4815162342:设计气味在这里是更好的术语。当有什么东西闻起来不对劲时,它可能是,但我无法确定它到底是什么,或者如何从这里开始。
标签: python asynchronous python-asyncio