Вопрос по wsgi, concurrency, python, tornado – Возможен ли параллелизм в торнадо?
Я понимаю, что торнадо является однопоточным и неблокирующим сервером, поэтому запросы обрабатываются последовательно (за исключением случаев использования подхода, управляемого событиями, для операций ввода-вывода).
Есть ли способ обрабатывать несколько запросов параллельно в торнадо для нормального (не IO) выполнения. Я не могу разветвлять несколько процессов, так как мне нужно общее пространство памяти для запросов.
Если это невозможно, пожалуйста, предложите мне другие серверы Python, которые могут обрабатывать параллельные запросы и также поддерживают wsgi.
ыми запросами, которые связаны с вычислениями, и вы хотите сделать это в Python, то вам нужен многопроцессорный сервер, а не многопоточный. CPython имеет глобальную блокировку интерпретатора (GIL), которая предотвращает одновременное выполнение байт-кода python более чем одним потоком.
Большинство веб-приложений выполняют очень мало вычислений и вместо этого ожидают ввода-вывода либо из базы данных, либо с диска, либо из служб на других серверах. Убедитесь, что вам нужно обработать запросы, связанные с вычислениями, прежде чем отбрасывать Tornado.
как долго эти вычислительные потоки будут работать. Если они работают недолго, и скорость их обработки, по крайней мере, соответствует скорости, с которой они прибывают, то с Торнадо все будет в порядке. Он действительно однопоточный, но очень хорошо масштабируется.
Если ваши связанные с вычислениями запросы выполняются долго, то использование многопоточного сервера не обязательно поможет, поскольку, как уже указывал Нед Батчелдер, GIL будет узким местом.
Если вы можете ослабить ограничение на использование одного и того же пространства памяти для всех запросов, вы можете рассмотреть возможность запуска Tornado сPyZMQ, поскольку он обеспечивает способ запуска нескольких серверных торнадо, запущенных одним экземпляром торнадо. Это позволяет вам продолжать использовать Торнадо для всего решения. Смотрите PyZMQweb.zmqweb Модуль для получения дополнительной информации.