我在共享主机上的 mod_wsgi 环境中运行 Django。我想限制请求可以使用的资源,如果超过该数量,理想情况下会引发异常。 WSGI选项如下:
WSGIRestrictSignal off
WSGIRestrictStdout off
VirtualHost 具有以下内容:
WSGIDaemonProcess django processes=10 threads=1 display-name=django-web
WSGIProcessGroup django
在请求中我做了以下事情:
signal.setrlimit(resource.RLIMIT_CPU, (10, -1))
signal.signal(signal.SIGXCPU, cpu_signal)
signal.signal(signal.SIGALRM, timeout_signal)
signal.alarm(1)
#Do some stuff
signal.alarm(0)
然而,当我运行请求时,我得到的错误信号只在主线程中起作用,尽管当我打印出事件线程的数量和我得到的线程名称时,我得到的是一个线程,当前线程名称是 MainThread,所以我不不明白为什么 Python 试图设置它不相信它在主线程中运行的信号。
我正在运行 Python 2.7.2、Django 1.3.1、Apache 2.2.21 和 WSGI 3.3
最佳答案
发送电子邮件到 mod_wsgi 邮件列表,然后在那里讨论什么是可能的。在 mod_wsgi 4.0 dev 版本中,有一些实验性机制可以在 CPU 使用率超过某个值时终止进程,但它是进程范围的。由于可以使用多线程,因此很难在每个请求的基础上执行此操作。在 stackoverflow 上这里不是讨论它的地方。
关于python - 限制wsgi中的系统资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9088324/