Создание приложения реального времени, которое постоянно использует один и тот же код Python на сервере, библиотеки импортируют при каждом запуске и используют память и время.
Я разрабатываю приложение для навигации в реальном времени на Android, которое собирает соответствующие данные со смартфона пользователя и отправляет на сервер код python с данными. Затем код Python возвращает местоположение пользователя в реальном времени. Теперь, учитывая, что мне нужно снова и снова запускать один и тот же код Python, необходимо загружать одни и те же библиотеки (я использую такие библиотеки, как numpy, MySQLdb, sys, rpy2). Теперь каждый раз, когда я запускаю код, есть некоторая память и время, которое расходуется на загрузку этих библиотек. Для меня, как оказалось, основной объем памяти и времени уходит на это. Это увеличивает затраты сервера и время выполнения без необходимости, так как я использую свои ресурсы только для загрузки одних и тех же библиотек. Есть ли какой-нибудь способ в Python, где я могу постоянно загружать свои библиотеки в оперативную память сервера и сокращать расходы? Возможно ли даже использовать только Python. Я думал, что это будет общая проблема, но я нахожу очень несвязанные ответы каждый раз, когда я гуглю это. Пожалуйста, предложите лучший способ сделать это. Мне немного не хватает лучших примеров кодирования на стороне сервера, может быть, моя проблема является частью этого, а не частью кодирования Python. Спасибо!
PS: Поскольку я использовал AWS, я думал, что AWS Lambda должна позаботиться об этом автоматически, я реализовал свой код как пакет AWS Lambda, но на самом деле я вижу снижение производительности.
1 ответ
У вас обычно есть веб-API, который отвечает на приложения Android. Эти API обычно предоставляются приложением Python за веб-сервером. Один из способов сделать приложение Python на веб-сервере - использовать WSGI. Все доступные реализации WSGI выполняют запуск приложения один раз (иногда несколько) и отправляют запросы уже запущенному приложению. Работа по поддержанию запущенных экземпляров и т. Д., По существу, полностью решена.
Если у вас есть задание Python, появляющееся по запросу и выходящее после его выполнения, это звучит как плохо спроектированное домашнее веб-приложение. В этом случае вы должны перенести его на WSGI.
Если, с другой стороны, у вас есть задания, которые должны выполняться асинхронно с вашим веб-сервисом (с длительным временем выполнения и т. Д.), Вам следует запустить второго демона Python, который получает задания из вашего веб-приложения через очередь. В этом случае демон также будет запущен во время загрузки и будет работать постоянно, пока вы не выключите сервер.