Сигналы Python, размещенные на WSGI - PullRequest
1 голос
/ 09 июля 2010

Я использую библиотеку сигналов python для уничтожения функции, если она выполняется дольше установленного периода времени.

Она хорошо работает в моих тестах, но при размещении на сервере я получаю следующую ошибку

"сигнал работает только в основном потоке"

Я установил отключение ограничения сигналов WSGI в моем httpd.conf

WSGIRestrictSignal Off

, как описаноhttp://code.google.com/p/modwsgi/wiki/ApplicationIssues#Registration_Of_Signal_Handlers

Я использую функции из описанного здесь рецепта http://code.activestate.com/recipes/307871/

Не уверен, что я делаю неправильно.Есть ли способ, чтобы сигналы вызывались в основном потоке?

1 Ответ

1 голос
/ 10 июля 2010

Единственный раз, когда любой код в Apache / mod_wsgi запускается в качестве основного потока, это когда файл сценария WSGI импортируется с помощью WSGIImportScript или эквивалентных методов. Хотя этот метод можно использовать для регистрации обработчика сигнала из основного потока, он будет бесполезен, поскольку все последующие запросы обслуживаются через вторичные потоки, а не через основной поток. Как следствие, я не думаю, что ваш обработчик сигнала будет когда-либо запускаться, если вспомнить, что он может работать, только если основной поток действительно что-то делает, и это не будет так, как основной поток, будет заблокирован в Apache / mod_wsgi просто ожидая завершения процесса.

Какую операцию вы пытаетесь убить? Делать это в контексте веб-приложения, особенно если многопоточное веб-приложение, вероятно, не очень хорошая идея.

...