gpt4 book ai didi

python - 处理多层应用程序中的通信

转载 作者:太空狗 更新时间:2023-10-30 02:12:59 25 4
gpt4 key购买 nike

我正在使用 Python 创建一个应用程序。

我首先设计了一个 API,它运行良好。我现在正在设计我的 GUI。 GUI 启动一个线程,用于针对 API 执行任务。

到目前为止,我使用观察者模式来处理不同层之间的通信。基本上,通信可以有两种类型(主要):- GUI 要求线程(以及随后的 API)开始/停止- API 将信息返回给传播到 GUI 的线程。

这是我正在谈论的当前架构的一个简单架构。基本上,一个箭头表示“通知”。

Current Observer/Observable communication

我担心的是,当应用程序线程通信时,Gui 和 API 都会收到消息,因为它们订阅了。问题是,每条消息只能由两者之一阅读。

我为解决这个问题所做的是发送一 strip 有 ID 的消息。这三个元素中的每一个都有一个 id,他们知道消息是给他们的还是现在的。但我不确定这是否是“正确”(理解最好)的方法。如果我以后有更多派对怎么办?

我开始考虑某种管理器来处理通信,但它必须位于架构的顶部,我不确定如何进一步组织它:s。

我不是要一个完整的解决方案,而是主要是更有经验的人的想法或最佳实践;)

在这种简单的情况下,我可以继续处理多个观察者模式。但我正在考虑将我的代码移植到服务器上。在这种情况下,应用程序可能有多个线程,处理 API 调用将变得非常不可能。

链接到我正在谈论的代码: GUI , ApplicationThreadApplication API .

您想查看通知和更新方法。

感谢任何建议!

最佳答案

我遇到的观察者模式的一个很好的实现是 Qt 中的信号/槽系统。对象有信号,槽(实际上是方法)可以连接到信号。发出信号时调用连接的插槽。

在我看来,您的一些问题可能源于您在每个对象中都有单一的通信 channel 这一事实。这迫使您在每个 update 方法中都有一些调度机制,并使代码非常复杂。

从 Qt 中汲取灵感,您可以为每种消息和收件人提供不同的信号。信号代码如下所示:

class Signal:
def __init__(self):
self.subs = []

def subscribe(self, s):
self.subs.append(s)

def signal(self, *args, **kwargs):
for s in self.subs:
s(*args, **kwargs)

例如,gui 将有一个信号 stop_signal 和线程一个处理它的方法:

def handle_gui_stop(self):
self.console_logger.debug("Facemovie is going to stop")
self.my_logger.debug("Facemovie is going to stop")
self.stop_process = True
# ...

在初始化代码的某个地方,我们会将所有内容联系在一起:

gui.stop_signal.subscribe(thread.handle_gui_stop)

关于python - 处理多层应用程序中的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12166279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com