在 Pyramid 中获取 WSGI 应用程序的句柄

Get handle to WSGI app in Pyramid

我需要在分叉后关闭 pserve/waitress 进程,但我无法获取对它的引用以便关闭它。通常,在金字塔 __init__.py 中,我会:

def main(global_config, **settings):
    """ This function returns a Pyramid WSGI application.
    """
    ...
    config = Configurator(settings=settings,
                          authentication_policy=authn_policy,
                          authorization_policy=authz_policy,
                          root_factory=Root)
    config.scan()   
    return config.make_wsgi_app()

但是,我无法在某个地方存储带有 WSGI 应用程序的变量,因为它在应用程序视图等 globals() 中不可见

如何获取它的句柄或至少以其他方式关闭它?

Configurator() 调用似乎阻止在 main() 函数中向设置字典添加键,所以我使用了一个技巧,在 settings['post_configurator_settings'] 下添加了一个字典,以后可以使用,所有这些都在__init__.py当然是:

def main(global_config, **settings):
...
settings['post_configurator_settings'] = {}
config = Configurator(settings=settings,
                     ...
                      root_factory=Root)

...

wsgi_app = config.make_wsgi_app()
settings['post_configurator_settings']['wsgi_app'] = wsgi_app
return wsgi_app