我已经设置了Apache + mod_wsgi运行django代码,并且我想添加一层保护以防非终止视图滑入。 - 超过30秒的请求将是理想的。在Django中自动终止长时间运行的请求
为了测试我刚刚在视图中放了一个time.sleep(60)
。
我试过了Apache的TimeOut 30
设置,但我仍然在60秒后返回卷曲。
我看到mod_wsgi本身提供了三种不同的超时值,但它们都不适用于长时间运行的请求。
是否有一个标准的Django中间件为此或有一个旋钮我缺少Apache或mod_wsgi?
谢谢。我们试图做的一件事是从5个进程(每个进程有20个请求线程)切换到100个进程(每个进程有一个请求线程)。希望是因为mod_wsgi的超时可能会终止进程而不会伤害无关的请求。在实践中,由于系统内存原因(我预料会有更多的共享内存)无法解决问题,但是如果不活动超时触发,mod_wsgi是否有可能会中止该进程? –
应用程序在fork之后加载,因此没有共享任何内容,以便在写入时进行复制将是一项好处。在使用Python分叉之前进行预加载的好处并不像人们想象的那样多,因为代码执行会操纵引用计数,因此任何方式都会对大多数内容进行复制。 –
mod_wsgi 4.0中的阻塞超时选项仍然可能是你最好的选择。您仍然可以运行多线程,并在所有线程都卡住时启动。等待所有线程卡住但不好。所以还有一个阻塞请求设置。如果你有线程= 15,你可以说阻塞请求= 5。所以,尽快它得到五个线程卡住和命中点没有任何请求被处理,然后它会安全地重新启动。能够设置阻止的请求阈值为您提供安全余量,因此流程不会停滞。 –