Шмелев Андрей
Шмелев Андрей Подписчиков: 87

50 команд на Python часть 7. Weak references, Выделение данных, Shelving data, Threads, Ввод данных.

2 дочитывания
0 комментариев
Эта публикация уже заработала 0,10 рублей за дочитывания
Зарабатывать

50 команд на Python часть 7. Weak references, Выделение данных, Shelving data, Threads, Ввод данных.

36. Слабые ссылки

Иногда необходимо иметь ссылку на объект, но при этом иметь возможность уничтожить его при необходимости. Слабая ссылка - это ссылка, которая может быть проигнорирована сборщиком мусора. Если на объект n остались только слабые ссылки, то сборщику мусора разрешается уничтожить этот объект и освободить место для других целей. Это полезно в тех случаях, когда у вас есть кэш или отображение больших наборов данных, которые не обязательно должны оставаться в памяти. Если объект, на который есть слабая ссылка, будет уничтожен, а вы попытаетесь получить к нему доступ, он будет отображаться как None. Вы можете проверить это условие и затем перезагрузить данные, если решите, что это необходимый шаг.

37. Выделение данных

Существует несколько различных способов сериализации памяти, когда вам нужно перенести результаты на диск. Один из них называется pickling. На самом деле Pickle - это целый модуль, а не просто одна команда. Чтобы сохранить данные на жестком диске, вы можете использовать метод dump для записи данных на диск. Когда вы захотите повторно загрузить те же данные в какой-то другой момент в будущем, вы можете использовать метод load, чтобы считать данные и распаковать их. Одна из проблем с pickle - это его скорость или ее отсутствие. Существует второй модуль, cPickle, который обеспечивает ту же базовую функциональность. Но, поскольку он написан на языке C, он может быть в 1000 раз быстрее. Следует помнить, что pickle не хранит информацию о классе объекта, а только информацию о его экземпляре. Это означает, что когда вы распакуете объект, он может иметь другие методы и атрибуты, если определение класса изменилось за прошедшее время.

38. Shelving data

Хотя pickling позволяет сохранять данные и перезагружать их, иногда вам требуется более структурированное хранение объектов в сессии Python. С помощью модуля shelve вы можете создать хранилище объектов, в котором может храниться практически все, что может быть сохранено. Бэкэнд хранилища на диске может быть обработан одной из нескольких систем, таких как dbm или gdbm. Как только вы открыли полку, вы можете читать и записывать на нее, используя пары ключ-значение. По завершении работы необходимо явно закрыть полку, чтобы она была синхронизирована с файловым хранилищем. Из-за того, как данные могут храниться в резервной базе данных, лучше не открывать соответствующие файлы вне модуля shelve в Python. Вы также можете открыть полку с параметром writeback, установленным в True. В этом случае вы можете явно вызвать метод sync для записи кэшированных изменений.

39. Потоки

В Python можно выполнять несколько потоков. Команда 'thread ()' может создать для вас новый поток выполнения. Она использует те же методы, что и для потоков POSIX. Когда вы впервые создаете поток, вам нужно указать имя функции, а также все параметры, которые нужны этой функции. Следует помнить, что эти потоки ведут себя так же, как и потоки POSIX. Это означает, что почти за все отвечает программист. Вам необходимо обрабатывать блокировки мьютексов (с помощью методов 'acquire' и 'release'), а также создавать исходные мьютексы с помощью метода 'allocate_lock'. Когда вы закончите, вам нужно "выйти" из потока, чтобы убедиться, что он правильно очищен и никакие ресурсы не остались позади. У вас также есть тонкий контроль над потоками, вы можете устанавливать такие вещи, как размер стека для новых потоков.

40. Ввод данных

Иногда необходимо получить данные от конечного пользователя. Команда 'input ()' может принять строку запроса для отображения пользователю, а затем ждать, пока пользователь наберет ответ. Как только пользователь закончит вводить текст и нажмет клавишу Enter, текст будет возвращен в вашу программу. Если перед вызовом команды input был загружен модуль readline, то вы получите расширенную функциональность редактирования строк и истории. Эта команда сначала передает текст через eval, и поэтому может вызвать не пойманные ошибки. Если у вас есть сомнения, вы можете использовать команду 'raw_input ()', чтобы избежать этой проблемы. Эта команда просто возвращает неизмененную строку, введенную пользователем. Опять же, вы можете использовать модуль readline, чтобы получить расширенное редактирование строк.

Понравилась публикация?
5 / 0
нет
0 / 0
Подписаться
Донаты ₽
Главная
Коллективные
иски
Добавить Видео Опросы