Python 了解apache为什么不断重新启动我的webpy应用程序?

Python 了解apache为什么不断重新启动我的webpy应用程序?,python,apache,mod-wsgi,restart,web.py,Python,Apache,Mod Wsgi,Restart,Web.py,我对托管web应用程序有点陌生,但在apache服务器上部署了一个使用webpy的运行Python应用程序,该应用程序使用mod_wsgi。它似乎运行得很好,只是在我使用应用程序时,apache似乎经常从零开始随机重新加载webpy应用程序(app.py) 它加载速度很快,因此是无缝的,但它会重置应用程序内部的所有用户数据。这应该会发生吗?我是否需要将所有数据连续写入文件?如果没有,我如何保持应用程序运行,直到我想停止它 谢谢 首先,如果可能的话,最好尽可能多地在客户端存储数据,这样可以使生活更

我对托管web应用程序有点陌生,但在apache服务器上部署了一个使用webpy的运行Python应用程序,该应用程序使用mod_wsgi。它似乎运行得很好,只是在我使用应用程序时,apache似乎经常从零开始随机重新加载webpy应用程序(app.py)

它加载速度很快,因此是无缝的,但它会重置应用程序内部的所有用户数据。这应该会发生吗?我是否需要将所有数据连续写入文件?如果没有,我如何保持应用程序运行,直到我想停止它


谢谢

首先,如果可能的话,最好尽可能多地在客户端存储数据,这样可以使生活更轻松。在数据库中存储或写入磁盘也是有效的选择,但请记住,数据库设计为可同时访问,而单个文件则不是,因此您需要仔细设计存储机制

一些服务器配置为自动终止空闲进程以节省资源。我不能确定情况是否如此,但您可以在httpd配置中检查WSGIDaemonProcess的以下设置:

最大请求数=nnn

定义守护进程在关闭和重新启动之前应处理的请求数限制。将该值设置为非零值有利于限制进程因(意外)内存泄漏而消耗的内存量

如果此选项未定义,或定义为0,则守护进程将是持久的,并将继续为请求提供服务,直到Apache本身重新启动或关闭

非活动超时=sss(2.0+)

定义关闭守护进程并在守护进程进入空闲状态时重新启动之前允许经过的最大秒数。出于此选项的目的,空闲意味着没有收到新的请求,或者当前请求没有尝试在定义的时间段内读取请求内容或生成响应内容

此选项的存在是为了允许重新启动在守护进程中运行的不经常使用的应用程序,从而允许回收正在使用的内存,进程大小会在加载任何应用程序或处理任何请求之前回落到初始启动大小

死锁超时=sss(2.0+)

定义在检测到Python GIL上的潜在死锁后关闭和重新启动守护进程之前允许通过的最大秒数。默认值为300秒

存在此选项是为了解决由于rouge Python C扩展模块在进入阻塞或长时间运行操作时未正确释放Python GIL而导致守护进程冻结的问题

关机超时=sss

定义当由于达到最大请求数或不活动超时而等待守护进程正常关闭时,或当用户启动的SIGINT信号发送到守护进程时,允许通过的最大秒数。当达到此超时时,即使仍有活动请求或仍在运行Python退出函数,守护进程也将被迫退出

如果未定义此选项,则关机超时将设置为5秒。请注意,当Apache本身停止或重新启动时,此选项不会更改应用于守护进程的关闭超时。该超时值在Apache内部定义为3秒,不能重写


来源:

使用标准Python HTTP basic服务器时也会出现同样的行为?他甚至可能没有使用守护程序模式,很可能使用嵌入式模式,这将取决于Apache基于Apache MPM设置的重启机制。看着我的PyCon谈论这件事。