限制wsgi中的系统资源

时间:2012-01-31 22:59:12

标签: python django signals mod-wsgi

我在共享主机上的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

1 个答案:

答案 0 :(得分:0)

发送电子邮件至mod_wsgi邮件列表,并将讨论可能的内容。在mod_wsgi 4.0 dev版本中,当CPU使用率超过某个值时,有一些实验机制可以杀死进程,但它是进程范围的。由于可以使用多线程,因此在每个请求的基础上执行它很困难。这里的stackoverflow不是讨论它的地方。