У меня интересная проблема. Я использую настройку IIS + FastCgi + Django для обслуживания запросов. Первоначально я надеялся на одновременное выполнение, но есть один компонент X , который не позволяет его многократный вызов из-за очевидного сбоя в его коде проверки лицензии при параллельном вызове. Чтобы убедиться, что работает только 1 экземпляр django, я планирую сделать следующее:
- IIS: Насколько я проверил, это не имеет ничего общего с параллелизмом напрямую. Я могу ошибаться.
- Модуль FastCGI в IIS:
Максимальное количество экземпляров: 1 (я думаю, это означает, что fastcgi будет загружать только 1 базу кода приложения django в памяти.)
Максимальный запрос экземпляра: 200 (Это гарантирует, что после того, как моя вышеуказанная кодовая база django приложение в памяти обработает 200 запросов последовательно, оно уничтожит себя и перезапустится.) Почему эта переработка даже необходимо?
Длина очереди: 1000 (Это создаст очередь входящих запросов, и даже если они поступают из нескольких источников, это гарантирует, что они не будут немедленно отклонены)
Django: теперь этот компонент
X загружается примерно за 1-2 секунды, поэтому я не могу поместить его код загрузки в функцию просмотра POST. Я планирую поместить его в apps.py внутри класса, который расширяется от AppConfig django .apps, как люди загружают модели машинного обучения. Таким образом, он будет загружен только один раз, когда рабочий FASTCGI загрузит django базу кода приложения в память.
Проблема в том, что после запроса 200, когда быстрый cgi перерабатывает или уничтожает? загруженная django кодовая база, мне также нужно уничтожить экземпляр компонента X. Однако я не очень хорошо осведомлен об этом аспекте.
Способ загрузки этого компонента X (который является приложением windows):
X = library.sdk ( "name") // это в основном открывает соединение с com-объектом приложения.
Чтобы уничтожить этот компонент, официальная документация требует сделать следующее:
X.close ( )
Где поместить этот код X.close () в django? Кроме того, не стесняйтесь поправлять меня, если я ошибаюсь.
Изменить: добавлено вознаграждение