Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
python&django.docx
Скачиваний:
30
Добавлен:
13.04.2015
Размер:
81.98 Кб
Скачать

20. Декоратор @property

Это дескриптор позволяющий работать с методами класса как с атрибутами. То есть, если тебе нужен атрибут значение которого заново будет вычисляться при каждом обращении тебе надо использовать декоратор @property для метода класса

class Person(object):

def __init__(self, first_name, last_name):

self.first_name = first_name

self.last_name = last_name

@property

def full_name(self):

return " ".join([self.first_name, self.last_name])

person = Person("Andrey", "Popp")

person.full_name # "Andrey Popp"

21. Что происходит если свойство не найдено?

AttributeError

22. Что такое MRO?

порядом разрешения метода. Для просмотра порядка метод __mro__ . Порядок снизу-вверх, слева на право.

23. Что такое metaclass?

Метакласс - это класс, экземплярами которого являются другие

классы, то есть метаклассы используются для создания классов так же,

как классы используются для создания объектов.

24. Как создать metaclass?

Унаследовать класс от type

25. Как сделать класс использующий metaclass?

class className (metaclass = NameMetaClass)

26. Что такое процессы и потоки в Python? Какие возникают проблемы?

Преимущество выполнения нескольких процессов, то есть запуск

автономных программ, заключается в том, что каждый процесс работает

независимо от других. Тем самым все бремя разрешения конфликтов

ложится на операционную систему. Недостаток такого подхода

заключается в неудобстве организации взаимодействий и совместного

использования данных между вызывающей программой и отдельными

В питоне есть стандартный модуль subprocess, который упрощает управление другими программами, передавая им опции командной строки и организуя обмен данными через каналы (pipe). Если нужно, чтобы ваше приложение выполняло несколько задач в одно и то же время, то можете воспользоваться потоками (threads). Потоки позволяют приложениям выполнять в одно и то же время множество задач. Многопоточность (multi-threading) важна во множестве приложений, серверы, ресурсоёмкие игры.

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

for x in L

а второй в этот момент начнет удалять значения из этого списка. Тут может произойти все что угодно: программа может упасть, или мы просто получим неверные данные.

Решением в этом случае является применение блокировки. При этом доступ к заблокированному списку будет иметь только один поток, второй будет ждать, пока блокировка не будет снята.

Применение блокировки порождает другую проблему – дедлок (deadlock) – мертвая блокировка. Пример дедлока: имеется два потока и два списка. Первый поток блокирует первый список, второй поток блокирует второй список. Первый поток изнутри первой блокировки пытается получить доступ к уже заблокированному второму списку, второй поток пытается проделать то же самое с первым списком. Получается неопределенная ситуация с бесконечным ожиданием. Эту ситуации легко описать, на практике все гораздо сложнее.

Вариантом решения проблемы дедлоков является политика определения очередности блокировок.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]