CPython中子解释器API的目的是什么?

18 投票
2 回答
5607 浏览
提问于 2025-04-15 11:08

我不太明白为什么会有子解释器的这个接口,以及它在像mod_wsgi这样的Apache模块中是怎么用的。这个接口主要是为了给在同一个进程中运行的不同应用程序创建一个安全的沙箱吗?还是说它是为了让多个线程可以同时运行?也许两者都有?还有其他的用途吗?

2 个回答

0

我理解的意思是,这个想法是能够在同一个进程中同时运行多个应用程序,以及同一个应用程序的多个副本

这个功能在其他脚本语言中也有,比如TCL,特别对图形界面构建工具、网页服务器等很有用。

但是在Python中,这个功能就不太好用,因为很多扩展并不支持多个解释器同时运行,所以一个解释器的操作可能会影响到另一个解释器中的变量。

13

我想这个的目的是为了创建独立的Python执行环境。比如说,mod_wsgi(一个Apache的Python模块)可以在一个Python解释器里运行多个应用程序,默认情况下是通过子解释器来实现的。

以下是一些来自文档的重点:

  • 这是一个几乎完全独立的Python代码执行环境。特别是,新的解释器会有自己独立的所有导入模块的版本,包括一些基础模块,比如__builtin____main__sys
  • 加载的模块表(sys.modules)和模块搜索路径(sys.path)也是独立的。
  • 因为子解释器(还有主解释器)都是在同一个进程里,所以它们之间的隔离并不是完美的——例如,使用像os.close()这样的低级文件操作时,它们可能会(无意中或恶意地)影响到彼此打开的文件。
  • 由于扩展在(子)解释器之间是共享的,有些扩展可能无法正常工作;尤其是当扩展使用了(静态)全局变量,或者在初始化后修改了模块的字典时,这种情况更可能发生。

撰写回答