Nano Hash - криптовалюты, майнинг, программирование

Делитесь памятью в Gunicorn?

У меня есть большая структура данных, доступная только для чтения (граф, загруженный в networkx, хотя это не должно быть важно), которую я использую в своем веб-сервисе. Веб-сервис создается во Flask, а затем обслуживается через Gunicorn. Оказывается, для каждого работника-пулеметчика, которого я раскручиваю, у него есть собственная копия моей структуры данных. Таким образом, моя структура данных размером ~ 700 МБ, которой можно управлять с помощью одного рабочего, превращается в довольно большой объем памяти, когда у меня работает 8 из них. Есть ли способ поделиться этой структурой данных между процессами-пулеметами, чтобы мне не приходилось тратить так много памяти?


  • Думали ли вы об использовании чего-то вроде 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
  • опция предварительной загрузки не работает, можете ли вы привести пример того, как ее использовать с какой-то фиктивной структурой данных? 10.03.2016
  • @neel - вам, вероятно, лучше задать другой вопрос с примером вашей настройки и того, что не работает. 10.03.2016
  • Я разместил вопрос здесь stackoverflow.com/questions/35914587/ Было бы здорово, если бы вы взглянули на это один раз. Заранее спасибо. 10.03.2016
  • Отличное чтение, хотя и не помогло мне настроить перехват родительского процесса при использовании рабочего Uvicorn, но мне удалось наткнуться на решение, которое, на мой взгляд, даже чище, чем метод предварительной загрузки, и оно использует файл конфигурации python для gunicorn. -c gconfig.py 20.12.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..