- •2. Поменять местами значение двух переменных
- •20. Декоратор @property
- •21. Что происходит если свойство не найдено?
- •27. Какие есть решения для синхронизации данных при работе с потоками?
- •28. Что такое итераторы?
- •38. Что такое middleware?
- •39. Как сделать сообщение с трейсбеком при ошибке(500.Html недостаточно)?
- •40. Какие типы отношений между таблицами бывают в Django-orm?
- •41. Как реализовать отношение ManyToMany без orm?
- •42. Какие встроенные сигналы бывают в Django?
- •43. Что такое mod_wsgi?
- •44. Что такое fixtures?
- •Outer join
- •56. Что такое git rebase?
- •61. Какие есть способы обхода дерева?
- •62. Что такое doctype в html?
- •63. Что такое meta в html?
- •Мета-тег Description, Generator, Keyword, Robots, Content-Language и т д
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) – мертвая блокировка. Пример дедлока: имеется два потока и два списка. Первый поток блокирует первый список, второй поток блокирует второй список. Первый поток изнутри первой блокировки пытается получить доступ к уже заблокированному второму списку, второй поток пытается проделать то же самое с первым списком. Получается неопределенная ситуация с бесконечным ожиданием. Эту ситуации легко описать, на практике все гораздо сложнее.
Вариантом решения проблемы дедлоков является политика определения очередности блокировок.
