Чтобы вызвать функцию в главном цикле событий (поток ввода-вывода) в Twisted из другого потока (потока не-ввода-вывода, т. Е. Потока приложения WSGI), вы можете использовать reactor.callFromThread()
.Если вы хотите дождаться результатов, используйте threads.blockingCallFromThread()
.Таким образом, вы могли бы вызывать функции, которые используют twisted.words
См. Использование потоков в витой .
Чтобы выяснить, является ли контейнер wsgi многопоточным, проверьте wsgi.multithread
, должно ли оно возвращать значение true для витого контейнера.
Контейнеры WSGI являются многопоточными для поддержки более одного запроса за раз (это не является строго необходимым, но облегчает жизнь с использованием существующего программного обеспечения).В противном случае (если вы не используете другие средства для ее решения) весь ваш сервер блокируется, пока ваш обработчик запросов ожидает ответа из базы данных.Некоторые люди считают, что проще писать обработчики запросов, не беспокоясь о блокировке других запросов, если не много одновременных запросов.
Функции в Python, которые выполняют задачи с интенсивным использованием ЦП, когда вопросы производительности могут использовать библиотеки, которые выпускают GIL во время вычислений илипереложить их на другие процессы.Сеть, дисковый ввод / вывод, которые часто встречаются в веб-приложениях, обычно работают намного медленнее, чем ЦП.