Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何设置WSGI服务器以类似于Apache运行?_Python_Tornado_Wsgi_Cherrypy - Fatal编程技术网

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

Python 如何设置WSGI服务器以类似于Apache运行?,python,tornado,wsgi,cherrypy,Python,Tornado,Wsgi,Cherrypy,我来自PHP/Apache世界,在那里运行应用程序非常简单。无论何时PHP应用程序崩溃,运行该请求的Apache进程都将停止,但服务器仍将愉快地破坏并响应其他客户端。有没有一种方法可以让Python应用程序以微笑的方式工作。我将如何设置wsgi服务器,如Tornado或CherryPy,使其工作方式类似?另外,如何从一台具有不同域的服务器上运行多个应用程序?如果您处于类似UNIX的环境中,则可以在Apache的守护程序模式下运行。这意味着Python代码将有一个单独的进程,即使它崩溃,服务器也将

我来自
PHP/Apache
世界,在那里运行应用程序非常简单。无论何时
PHP
应用程序崩溃,运行该请求的Apache进程都将停止,但服务器仍将愉快地破坏并响应其他客户端。有没有一种方法可以让Python应用程序以微笑的方式工作。我将如何设置wsgi服务器,如
Tornado
CherryPy
,使其工作方式类似?另外,如何从一台具有不同域的服务器上运行多个应用程序?

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


至于在同一台服务器上运行多个域,请检查。

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


至于在同一台服务器上运行多个域,请检查。

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

我们要讨论的是您所说的“崩溃Apache进程”的确切含义

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

即使找到了使进程崩溃的方法,Apache/mod_wsgi也可以处理这个问题,进程将被替换。Gunicorn WSGI服务器也将这样做。CherryPy不会这样做,除非您运行一个流程管理器来监视它,并且流程监视器重新启动它。Tornado在其单进程模式下也会有同样的问题。使用Tornado作为Gunicorn中的工作人员是解决这个问题的一种方法,而且我相信Tornado本身现在可能有一些流程管理器,用于运行多个流程,允许它在流程死亡时重新启动流程


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

您所追求的可能会发生在WSGI服务器上。这是因为任何Python异常都只影响当前请求,框架或WSGI服务器将捕获异常,记录它并将其转换为HTTP 500状态页。应用程序仍将在内存中,并将继续处理未来的请求

我们要讨论的是您所说的“崩溃Apache进程”的确切含义

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

即使找到了使进程崩溃的方法,Apache/mod_wsgi也可以处理这个问题,进程将被替换。Gunicorn WSGI服务器也将这样做。CherryPy不会这样做,除非您运行一个流程管理器来监视它,并且流程监视器重新启动它。Tornado在其单进程模式下也会有同样的问题。使用Tornado作为Gunicorn中的工作人员是解决这个问题的一种方法,而且我相信Tornado本身现在可能有一些流程管理器,用于运行多个流程,允许它在流程死亡时重新启动流程


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

+1。当代码更改时,甚至可以让mod_wsgi自动重新加载(mod_wsgi站点上有这方面的示例代码)。+1。当代码更改时,甚至可以让mod_wsgi自动重新加载(mod_wsgi站点上有这方面的示例代码)。Graham,很抱歉我刚才说的应用程序语言错误,如未捕获异常。谢谢你详尽的回答。格雷厄姆,对不起,我刚才说的是应用程序语言错误,比如未捕获异常。谢谢你详尽的回答。