2012-01-31 1 views
2

Я запускаю Django в среде mod_wsgi на общем хосте. Я хочу ограничить ресурсы, которые может использовать запрос, и в идеале повысить исключение, если оно превышает эту сумму. Варианты WSGI заключаются в следующем:Ограничение системных ресурсов в 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, поэтому я не поддаюсь d почему 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 есть несколько экспериментальных механизмов для процесса убийства, когда использование ЦП превышает некоторую ценность, но это процесс широкий. Выполнение этого на основе запроса затруднено из-за возможности использования многопоточности. Здесь, в stackoverflow, не место для обсуждения.