У меня есть большая структура данных, доступная только для чтения (граф, загруженный в networkx, хотя это не должно быть важно), которую я использую в своем веб-сервисе. Веб-сервис создается во Flask, а затем обслуживается через Gunicorn. Оказывается, для каждого работника-пулеметчика, которого я раскручиваю, у него есть собственная копия моей структуры данных. Таким образом, моя структура данных размером ~ 700 МБ, которой можно управлять с помощью одного рабочего, превращается в довольно большой объем памяти, когда у меня работает 8 из них. Есть ли способ поделиться этой структурой данных между процессами-пулеметами, чтобы мне не приходилось тратить так много памяти?
Делитесь памятью в Gunicorn?
02.12.2014
- Думали ли вы об использовании чего-то вроде Redis для хранения данных и доступа к ним из каждого процесса? По скорости было бы очень похоже на разделяемую память. 02.12.2014
- Я бы хотел, но мы говорим о сложном графе, который нелегко сохранить в Redis (Redis не имеет ориентированных граничных графов или общей поддержки графов в настоящее время AFAIK). 02.12.2014
- Решение сработало для вас? Если да, можете ли вы подробно рассказать мне, как вы это сделали? 11.03.2016
Ответы:
1
Похоже, самый простой способ сделать это - сказать Gunicorn предварительно загрузить ваше приложение с помощью параметра preload_app
. Это предполагает, что вы можете загрузить структуру данных как переменную уровня модуля:
from flask import Flask
from your.application import CustomDataStructure
CUSTOM_DATA_STRUCTURE = CustomDataStructure('/data/lives/here')
# @app.routes, etc.
В качестве альтернативы вы можете использовать файл с отображением памяти. (если вы можете обернуть общую память своей собственной структурой данных), gevent с gunicorn, чтобы убедиться, что вы используете только один процесс, или модуль многопроцессорной обработки для развертывания вашего собственного сервера структуры данных, к которому вы подключаетесь с помощью IPC.
02.12.2014
Новые материалы
Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..
Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально
Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..
Частный метод Python: улучшение инкапсуляции и безопасности
Введение
Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..
Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования
Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..
Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv)
Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..
Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..
Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..
-c gconfig.py
20.12.2020