基于续航的Python网络应用框架设计

0 投票
2 回答
649 浏览
提问于 2025-04-16 04:18

有很多基于继续执行的框架,比如Java、Ruby等,但在Python中却没有。Nagare框架在某种程度上解决了这个问题,但它不使用标准的Python,而是用了一种叫做无栈Python的东西来处理继续执行的问题。

我在想,

标准Python中有什么限制,导致无法创建这样的继续执行的网络框架呢?

还有,有什么方法可以绕过这些限制?在继续执行框架的架构中,哪些部分是标准的(就像MVC中的模型、视图和控制器)?

2 个回答

2

没错,继续执行(continuation)是某些编程语言的一个特性,而CPython(Python的一种实现)遗憾的是不支持这个特性。

在纯Python中,有一些常见的解决方法:比如使用回调函数或者延迟执行的工具,像Twisted和Tornado,或者到处使用'yield'来模拟协程,像Diesel那样。不过这两种方法都需要你改变设计和编写应用程序的方式。此外,继续执行可以被“重放”,这就是基于继续执行的框架如何自动处理“返回”按钮问题的原因。

最后,具体来说,在Nagare中,我们使用冻结的任务(tasklet)的序列化来获得一个继续执行对象。

2

在你开始考虑写一个基于“继续”的框架之前,你需要一种支持“继续”的编程语言(或者至少是可以用来模拟“继续”的协程)。这里的“继续”是一种控制结构,类似于循环、闭包或函数,而不是像MVC那样的设计模式。不幸的是,目前标准的Python并不支持“继续”。这也是人们开发无栈Python的原因之一。

Java有点特殊。这个语言本身不支持“继续”,但它的虚拟机支持(为了处理异常)。我觉得他们的做法是,在运行时修改编译后的字节码,并重新排列指令,让它看起来像是支持“继续”。这有点像通过“猴子补丁”来实现无栈Python。

撰写回答