Использование скрученных слов в контейнере WSGI - PullRequest
5 голосов
/ 29 октября 2011

Я запускаю django на витой в контейнере wsgi.Очевидно, что я избегаю всего асинхронного с отложенными внутри моего кода django, потому что, согласно документации, возможности витой асинхронности не разрешены в приложениях WSGI.

Однако я хотел бы использовать twisted.words внутри моего приложения WSGI.отправлять запросы на jabber сервер.Это считается асинхронным или я могу использовать его внутри моего приложения?Что может произойти, если я все равно отправлю запросы twisted.words jabber на сервер xmpp внутри WSGI?

Более того, у меня есть более общий вопрос.Есть ли какая-либо причина, по которой контейнер Twisted WSGI является многопоточным (действительно ли он многопоточный?), Поскольку хорошо известно, что python GIL только снижает общую производительность скрипта с потоками.

Спасибо за любые ответы.

1 Ответ

0 голосов
/ 30 октября 2011

Чтобы вызвать функцию в главном цикле событий (поток ввода-вывода) в Twisted из другого потока (потока не-ввода-вывода, т. Е. Потока приложения WSGI), вы можете использовать reactor.callFromThread().Если вы хотите дождаться результатов, используйте threads.blockingCallFromThread().Таким образом, вы могли бы вызывать функции, которые используют twisted.words См. Использование потоков в витой .

Чтобы выяснить, является ли контейнер wsgi многопоточным, проверьте wsgi.multithread, должно ли оно возвращать значение true для витого контейнера.

Контейнеры WSGI являются многопоточными для поддержки более одного запроса за раз (это не является строго необходимым, но облегчает жизнь с использованием существующего программного обеспечения).В противном случае (если вы не используете другие средства для ее решения) весь ваш сервер блокируется, пока ваш обработчик запросов ожидает ответа из базы данных.Некоторые люди считают, что проще писать обработчики запросов, не беспокоясь о блокировке других запросов, если не много одновременных запросов.

Функции в Python, которые выполняют задачи с интенсивным использованием ЦП, когда вопросы производительности могут использовать библиотеки, которые выпускают GIL во время вычислений илипереложить их на другие процессы.Сеть, дисковый ввод / вывод, которые часто встречаются в веб-приложениях, обычно работают намного медленнее, чем ЦП.

...