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

时间:2009-04-16 07:20:45

标签: mod-wsgi python

我不清楚为什么子解释器API存在以及为什么它在诸如mod_wsgi apache模块之类的模块中使用。它主要用于为同一进程中运行的不同应用程序创建安全沙箱,还是一种允许多线程并发的方法?也许两者?还有其他目的吗?

2 个答案:

答案 0 :(得分:14)

我想目的是创建单独的python执行环境。例如,mod_wsgi(Apache Python模块)托管单个python解释器,然后在子解释器中托管多个应用程序(在默认配置中)。

documentation的一些要点:

  • 这是一个(几乎)完全独立的Python代码执行环境。特别是,新的解释器具有所有导入模块的独立版本,包括基本模块__builtin____main__sys
  • 已加载模块(sys.modules)和模块搜索路径(sys.path)的表也是分开的。
  • 因为子解释器(和主解释器)是同一个过程的一部分,它们之间的绝缘并不完美 - 例如,使用像os.close()这样的低级文件操作它们可能(意外或恶意) )影响彼此的打开文件。
  • 由于(子)解释器之间共享扩展的方式,某些扩展可能无法正常工作;当扩展使用(静态)全局变量时,或者扩展在初始化后操作模块的字典时,这种情况尤其可能。

答案 1 :(得分:0)

正如我最后所理解的那样,我们的想法是能够在同一个流程中执行多个应用程序以及同一个应用程序的多个副本

这是其他脚本语言(例如TCL)中的一项功能,对gui构建器,Web服务器等特别有用。

它在python中断,因为许多扩展不是多解释器安全的,因此一个解释器的操作可能会影响另一个解释器中的变量。