在Django中自动终止长时间运行的请求

Ry4*_*ase 5 python apache django mod-wsgi

我有一个使用Apache + mod_wsgi运行django代码的设置,我想添加一层保护,以防非终止视图滑入.有些东西可以杀死超过30秒的请求.理想.

为了测试我只是time.sleep(60)在一个视图中.

TimeOut 30在Apache中尝试过这个设置,但是60秒后我仍然会恢复卷曲.

我看到mod_wsgi本身提供了三种不同的超时值,但它们似乎都不适用于长时间运行的请求.

是否有一个标准的Django中间件,或者是否有一个我在Apache或mod_wsgi上缺少的旋钮?

Gra*_*ton 6

实际上很难在多线程应用程序中终止单个Python请求线程.您可以做的最好的事情是决定关闭整个过程并重新启动它.因为这样的操作会破坏并发请求,所以您最终需要将自己限制为单线程配置.

即使这样,mod_wsgi 3.X中的支持也不是理想的.守护进程模式存在不活动超时,但实际上会导致进程在两种情况下重新启动.第一种是根本没有请求,进程空闲.第二种是所有请求线程都被阻塞并且超时到期.

在mod_wsgi 4.X中(此时在存储库中继中),这两个概念已经分开,现在不活动超时仅适用于没有并发请求的完全空闲进程.新的阻塞超时已添加到单独特定的超时,以阻止整个进程.你可以使用后者.

如果您想了解有关新选项的更多信息,您需要转到mod_wsgi邮件列表进行讨论.