在多个域(virtualhost)上运行的多个python Web应用程序?

时间:2011-09-19 09:01:52

标签: python hosting python-3.x web-hosting cherrypy

我陷入困境和绝望。

是否可以在cherrypy上使用virtualhost在多个不同的域上提供多个python Web应用程序?嗯等等......我会回答自己:是的,这是可能的。使用虚拟主机调度程序是可能的,直到我需要:

我需要使用相同应用程序的更多实例,但版本不同。这意味着我需要以某种方式为这些应用程序拆分python import的命名空间。

实施例: 我有应用程序MyApp,它有两个版本。我有两个域app1.comapp2.com。 当我访问app1.com时,我希望在版本1中获取应用MyApp。当我访问app2.com时,它应该是版本2中的MyApp

我现在正在使用VirtualHostDispatcher的{​​{1}},问题在于,当我使用cherrypy 3.2版本1的方法导入时,MyApp版本2具有之前加载过,python将使用已导入的模块(因为模块缓存)。

是的..每次都可以包装导入并清理python模块缓存(我将它用于顶级应用程序对象实例化),但对我来说它似乎非常不洁净...而且我认为它也是低效...

那么,你推荐我什么? 我正在考虑使用mod_WSGI来使用apache2和cherrypy,但似乎这并没有解决MyApp问题,因为所有应用程序仍然存在一个python进程。

也许,我正在考虑整个问题完全错误,我需要重新考虑一下。我为每个想法或小费打开了。唯一的限制是我想使用Python 3.其他任何东西仍然可供讨论: - )

感谢您的每一个回复!

2 个答案:

答案 0 :(得分:1)

Apache / mod_wsgi可以执行所需的操作。 mod_wsgi下的每个安装的Web应用程序将在同一进程中的不同子解释器中运行,因此可以使用不同的代码库。更好的是,您使用mod_wsgi的守护进程模式并将每个Web应用程序委托给不同的进程,因此不会有相互干扰的风险。

答案 1 :(得分:0)

如何创建像这样做的myapp_selector模块:

def application(env, start_response):
    import myapp1
    import myapp2
    if env['SERVER_NAME'] == 'myapp1.com':
        myapp = myapp1
    elif env['SERVER_NAME'] == 'myapp2.com':
        myapp = myapp2
    # ...
    return myapp.process_request()