У меня есть одноэлементная структура данных в памяти внутри моего проекта Django (какое-то kd-дерево, к которому нужно получить доступ по всему проекту).
Для тех, кто не знает Django, я полагаю, что та же проблема возникнет с обычным кодом Python.
Я знаю, что это зло (Singleton), и я ищу лучшие способы реализовать это, но мой вопрос здесь связан с другой темой:
Я создаю экземпляр синглтона внутри своего кода, вызывая Singleton.instance()
, и он правильно дает мне объект, затем он остается в каком-то месте в памяти внутри моего ./manage.py runserver
.
Проблема заключается в том, что я выполняю некоторую асинхронную обработку с помощью Celery в той же самой структуре данных Singleton (например, реконструируя kd-дерево).
НО при запуске Celery worker он запускает код внутри другого процесса и, следовательно, имеет другое пространство памяти, что означает, что он работает на совершенно другом экземпляре Singleton.
Что было бы лучшим шаблоном проектирования для этой проблемы? Я думал о том, чтобы выполнить всю обработку, связанную с моей структурой данных, внутри проекта Django (без использования Celery), но что мне очень понравилось в Celery, так это то, что обработка, необходимая для структуры данных, может занять много времени (около 30 секунд) и он должен хорошо обрабатывать параллелизм (может быть несколько запросов одновременно для восстановления Kd-Tree).
Я был бы очень рад получить некоторое представление об этом, так как за последние 3 дня я не добился никакого прогресса. Большое спасибо.