Python实现如何在函数调用期间处理上下文交换



我正试图在python中创建一个高度模块化和数据驱动的程序,我希望模块之间的调用通过一个中央代理单例,而不是每个对象都引用它们所通信的对象。这样做的主要原因是,我不希望对象具有其他模块如何工作的任何信息,以防它们在运行时切换。

目前,这个代理服务只是一个单例,它有一个元组列表,其中包含函数名和对拥有它的对象的引用。每当模块遇到一个不属于其自己方法的命令时,默认行为是将其发送到这个代理服务,该服务将检查是否有人能够在线执行它。如果它找到某人,代理将函数调用转发到正确的对象,然后在收到返回后将其发送给调用者。

我遇到的问题是,每次我需要进行任何进程间通信时,我都会导致对对象的上下文交换,这最终会使我的调用堆栈不必要地膨胀。

因此,我的问题是:

在python实现中如何处理这样的上下文更改?我可以进行哪些优化来降低影响这样的背景变化

p.S.:名称代理可能有点误导,但这不是一个网络应用程序。整个过程是在一台机器中的一个进程中运行的。

编辑:正如所问,这里有一个更具体的例子。

class forwardToProxy:
dict = {} #this dictionary would contain the names of commands such as "deleteName"
#and a first class function bound to the part of the program currently
#responsible for executing that command.
def forward_command(command, arg):
return dispatch[command](arg)

这是我所说的代理对象的一个例子。这个类所做的唯一一件事就是将命令转发到当前分配给执行的程序部分。我的问题涉及使用这种结构的后果。

  • 模块对它的每次调用是否都会在内存中创建该类的新实例,直到它解析为止?

  • 如果一个命令被转发到一个模块,这将转发另一个命令,并导致另一个模块转发另一条命令,那么这个对象的多少实例将在内存中等待最终返回?

  • 每次我们在不同的python实现中进行函数调用时,内存中到底会发生什么?(请解释相同模块和外部模块调用)

  • 可以使用哪些优化来减少此类上下文更改的影响(例如@staticmethod会有帮助吗)?

有趣的主题。坦率地说,Python预计不会工作得很快,然而,我观察到对它的需求越来越多。

简而言之:

函数范围是dict,在这里看不到太多需要优化的内容。

稍长一点的解释:

我知道,当空间优化开始发挥作用时,会使用命名元组。其理由是,对于命名元组,所有键都是相同的,并保留一次。这样可以在代理定义中节省一些空间。但是,若调用函数,它会创建一个作用域,即dict。Python就是这样工作的。如何优化它?好吧,你必须用C来写,才能完全控制分配的内容和时间。

相关内容

  • 没有找到相关文章

最新更新