如何设置WSGI服务器以类似于Apache运行?

时间:2012-11-29 04:49:28

标签: python tornado wsgi cherrypy

我来自PHP/Apache世界,运行应用程序非常容易。每当PHP应用程序崩溃Apache进程运行时,该请求将停止,但服务器仍将继续破坏并响应其他客户端。有没有办法让Python应用程序以一种微笑的方式工作。我如何设置像TornadoCherryPy这样的wsgi服务器,这样它的工作方式类似?另外,我如何从一个具有不同域的服务器运行多个应用程序?

2 个答案:

答案 0 :(得分:3)

无论如何,WSGI服务器可能会发生什么。这是因为任何Python异常仅影响当前请求,框架或WSGI服务器将捕获异常,记录异常并将其转换为HTTP 500状态页面。该应用程序仍将在内存中,并将继续处理将来的请求。

我们得到的是“崩溃Apache进程”究竟是什么意思。

您的代码很少会崩溃,因为整个过程会导致进程因核心转储而完全退出。因此,在将应用程序语言级别错误等同于完整进程崩溃时,您是否对术语感到困惑。

即使您确实找到了崩溃进程的方法,Apache / mod_wsgi也可以处理,并且该进程将被替换。 Gunicorn WSGI服务器也会这样做。 CherryPy除非你有一个运行的进程管理器监视它并且进程监视器重新启动它。龙卷风在单一过程模式下会遇到同样的问题。使用Tornado作为Gunicorn的工作人员是另一种方式加上我相信Tornado本身可能现在有一些进程管理器用于运行多个进程,如果它们死了就允许它重新启动进程。

请注意,如果导致Python异常的应用程序错误足够严重并且会破坏进程中的状态,则后续请求可能会出现问题。这是与PHP的一个区别。使用PHP,在任何请求之后,无论是否成功,应用程序都会被有效地丢弃并且不会持久存在。因此有缺陷的代码不会影响后续请求。在Python中,因为在请求之间保留了加载代码和保留状态的进程,所以从技术上讲,您可以将状态设置为必须重新启动进程才能修复它。我不知道任何WSGI服务器,但有一种机制可以在一个请求返回错误响应时自动重启进程。

答案 1 :(得分:1)

如果您处于类UNIX环境中,则可以在守护程序模式下在Apache下运行mod_wsgi。这意味着Python代码将有一个单独的进程,即使它崩溃,服务器也会继续正常运行(希望WSGI进程自动重启)。 WSGI应用程序可以在多个进程下运行,每个进程可以运行多个线程。

至于在同一台服务器上运行多个域,请检查Name-Based Virtual Hosts