WSGIDaemonProcess <user> processes=5 threads=1 python-home=/path/to
WSGIProcessGroup <user>
WSGIRestrictEmbedded On
WSGILazyInitialization On
WSGIApplicationGroup %{GLOBAL}
В моем приложении используется Gdal, который не является потокобезопасным. В документации предлагается использовать wsgi с threads=1
. Если в конфигурации apache используется mpm-worker
с многопотоковым соединением, будет ли threads=1
гарантировать безопасность потоков?
Настройки апача:
KeepAlive Off
SetEnvIf X-Forwarded-SSL on HTTPS=1
ServerLimit 1
StartServers 1
MaxRequestWorkers 5
MinSpareThreads 1
MaxSpareThreads 3
ThreadsPerChild 5
дополнительная цитата к принятому ответу выглядит следующим образом:
StartServers 2
ThreadsPerChild 25
WSGIDaemonProcess processes=1 threads=15
В случае приложения WSGI дочерние рабочие процессы Apache действуют только как прокси, перенаправляя запросы в процесс(ы) режима демона mod_wsgi для обработки.
Таким образом, с двумя дочерними рабочими процессами Apache максимальное количество соединений равно 50 (каждый из которых имеет 25 потоков). Эти дочерние рабочие процессы Apache принимают соединения как для запросов статических файлов, так и для динамических запросов, которые затем передаются через прокси в процесс режима демона mod_wsgi. Только с одним процессом режима демона mod_wsgi само приложение WSGI сможет обрабатывать 15 одновременных запросов.
Если есть запросы, обрабатываемые процессом режима демона mod_wsgi, поскольку дочерние рабочие процессы Apache передают запросы и ответы, поток по-прежнему используется для жизни запроса в дочерних рабочих процессах Apache. 35 (50-15) дополнительных потоков в дочерних рабочих процессах Apache по-прежнему будут доступны для обработки статических запросов, поддержки соединений и действия в качестве механизма буферизации для ожидающих динамических запросов к приложению WSGI. Последнее особенно полезно для медленных клиентов, поскольку дочерние рабочие процессы apache не будут пересылать запрос процессу демона mod_wsgi до тех пор, пока не будет доступна полная информация о запросе.
Обратите внимание: только потому, что процесс режима демона mod_wsgi может обрабатывать только 15 одновременных запросов, не означает, что он может обрабатывать только такое количество запросов в секунду. Сколько запросов в секунду будет зависеть от того, насколько медленным является ваше приложение и какая конкуренция существует на общих ресурсах. Последние влияют на необходимость сериализации операций.
В целом, режим демона mod_wsgi можно сравнить с использованием mod_proxy перед отдельным внутренним веб-сервером. В этом случае mod_wsgi создал процессы демона и управляет ими от вашего имени.
Грэм Дамплтон