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

Jam*_*one 17 python mod-wsgi

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

cod*_*ape 14

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

文档中的一些关键点:

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

  • GIL仅用于执行实际的Python代码.因此,如果您使用的C扩展模块能够在不保存GIL的情况下工作,您仍然可以获得一些并发度.一些C扩展模块故意对其数据进行分区,以便它们可以执行此操作,从而获得多CPU /核心系统的好处. (5认同)
  • GIL是该过程的全局对象,并在子解释器之间共享.所以不,他们不能同时运行.http://objectmix.com/python/377035-multiple-independent-python-interpreters-cc-program.html (3认同)