Имам единична структура от данни в паметта в моя Django проект (някакво kd-дърво, което трябва да получи достъп в целия проект).
За тези, които не познават Django, вярвам, че същият проблем ще се появи с обикновен код на Python.
Знам, че е зло (Singleton) и търся по-добри начини да го внедря, но въпросът ми тук е свързан с друга тема:
Създавам екземпляр на сингълтона в моя код, като извиквам Singleton.instance()
и той ми дава обекта правилно, след което той остава на някое място в паметта в моя ./manage.py runserver
.
Проблемът е, че правя някаква асинхронна обработка с Celery на същата тази структура от данни Singleton (като реконструиране на kd-дървото).
НО когато стартира Celery worker, той изпълнява кода в рамките на различен процес и следователно има различно пространство в паметта, което означава, че работи на напълно различен екземпляр на Singleton.
Какъв би бил най-добрият шаблон за проектиране за този проблем? Мислех да извърша цялата обработка, свързана с моята структура от данни в проекта Django (без да използвам Celery), но това, което много ми хареса в Celery е, че обработката, необходима за структурата от данни, може да отнеме много време (около 30 секунди) и трябва да се справя добре с едновременността (може да има няколко заявки едновременно за реконструиране на Kd-Tree).
Ще се радвам да имам някаква информация за това, тъй като нямам никакъв напредък през последните 3 дни. Благодаря много.