Так как я узнал о классах на Python, мне учили, что атрибуты уровня класса распределяются между всеми экземплярами данного класса. Что-то я не думаю, что раньше видел какой-либо другой язык.Общая память для классов Python
В результате я мог бы иметь несколько экземпляров, например, класс DB, который извлекает данные БД данных и выгружает их в атрибут уровня класса. Тогда любой экземпляр, который нуждался в какой-либо из этих данных, имел бы доступ к нему, не переходя к кешу или сохраненному файлу в .
В настоящее время я отлаживаю класс аналитики, который захватывает данные БД с помощью неэффективных средств - в настоящее время я пытаюсь сделать намного быстрее. В настоящее время для загрузки данных DB требуется несколько минут. И формат, который я выбрал для данных с ndarrays и т. Д., Не хочет сохранять в файл через numpy.save (я не помню ошибку прямо сейчас). Каждый раз, когда я делаю небольшую настройку, данные теряются, и я должен ждать несколько минут, чтобы перезагрузить.
Поэтому мне пришла в голову мысль, что я могу создать простой класс для хранения этих данных. Класс, который мне не нужно будет изменять, может работать под отдельной консолью iPython (я использую Anaconda, Python 2.7 и Spyder). Таким образом, я мог бы связать класс analytics с общим классом данных в начале класса analytics. Что-то вроде этого:
def __init__(self):
self.__shared_data = SharedData()
self.__analytics_data_1 = self.__shared_data['analytics_data_1']
Идея заключается в том, что я бы тогда писать self.__analytics_data_1
внутри методов аналитики класса. Он будет автоматически обновляться до класса данных осколков. У меня была бы консоль iPython открытой, чтобы ничего не делать, кроме как держать экземпляр класса общих данных во время отладки. Таким образом, когда мне приходится перезагружать и восстанавливать класс аналитики, он просто получает все данные, которые я уже захватил. Очевидно, что если есть проблема с самими данными, ее нужно будет удалить вручную.
Очевидно, что я бы не хотел использовать один и тот же общий класс данных для каждого инструмента, который я построил. Но это легко обойти. Причина, по которой я упоминаю все это, заключается в том, что я не смог найти рецепт для чего-то подобного в Интернете. Там, кажется, много рецептов, поэтому я думаю, что отсутствие рецепта может быть признаком того, что это плохая идея.
Я попытался достичь чего-то подобного через Memcache в проекте PHP. Тем не менее, в этом проекте у меня было много чтений и написано, и оказалось, что код вызывал некоторую форму столкновения записи. Поэтому данные не обновлялись. (И Memcache не гарантирует, что данные будут даже там.) Предотвращение этого столкновения записи означало много дополнительного кода, дополнительное время обработки и, в конечном счете, код был слишком медленным, чтобы быть полезным. Я подумал, что могу попытаться снова использовать эту общую память в Python, а также использовать разделяемую память для целей отладки.
Мысли? Предупреждения?
https://wiki.python.org/moin/UsingPickle? –
Это первый проект, в котором я хотел сохранить что-то другое, кроме dict, в текстовый файл с кодировкой JSON.Я пытался использовать двоичный файл numpy, потому что я использую ndarrays. Я попробую мариновать и отчитаться. –
Рассол имеет те же проблемы, что и numpy save для моего случая. В сущности, я Monkey Patch класс, который я построил для доступа SQL Alchemy к моей БД. Патч Monkey позволяет мне легко добавлять дополнительные данные. Но потом я получаю сообщение об ошибке: «PicklingError: не может pickle: это не тот же объект, что и db_base_config.Search_Stats_Mixin' –