我在共享主机上的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
答案 0 :(得分:0)
发送电子邮件至mod_wsgi邮件列表,并将讨论可能的内容。在mod_wsgi 4.0 dev版本中,当CPU使用率超过某个值时,有一些实验机制可以杀死进程,但它是进程范围的。由于可以使用多线程,因此在每个请求的基础上执行它很困难。这里的stackoverflow不是讨论它的地方。