Pull to refresh
6
0
Андрей Соболев @Sobolev5

Разработчик Django&Python

Send message

channel-box дорос до версии 0.4, оброс более очевидным api и теперь дружит с последними версиями Starlette.

https://github.com/Sobolev5/channel-box

Вот здесь можно посмотреть пример работы

https://channel-box.andrey-sobolev.ru/

from simple_print import sprint

my_var = 42

sprint(myvar)

Так просто короче и быстрее.

Повторюсь. Я не делал это в противовес чему либо и чужие решения не критикую. Кому то возможно пригодится мое.

К сожалению иногда вам подобные классы достаются в "наследство" от кого-то еще, а задача на рефакторинг задвигается в беклог.

Cделал рефакторинг, пофиксил по вашим замечаниям. Спасибо за критику.

Теперь "минимальный" пакет ставится pip install simple-print

"Максимальный" pip install simple-print[broker]

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

Спасибо за интересное решение. Посмотрю.

По поводу pydantic и pika, они нужны для логирования в кликхаус через rabbitmq. Возможно кому то это также пригодится, но об этой возможности я не стал писать, чтобы не перегружать статью. Примеры есть в документации на github.

Есть, но к примеру для отладки web view (если вы работаете с фреймворком аля Django) он вам вряд ли будет полезен. Впрочем вы можете поделится опытом.

Данное решение не является противопоставлением стандартному логгеру, а скорее дополняет его в некоторых ситуациях. Особенно при отладках сложных расчетов (в моем случае).

Все написанное подтверждаю.
Человеческих собеседований тут нет.
У меня были задачи на палиндром, что то там про матрицы и т.п.
Я дошел в Яндексе до третьего этапа и решил что это скучный и унылый квест, который никакого отношения к реальности не имеет.

Все же хороший разработчик, это не тот кто умеет складывать в уме матрицы,
а обладает более глубокими прикладными знаниями (к примеру как работает сеть, как устроен unix и т.п.) и имеет большой практический опыт в «нестандартных» задачах в том числе и по масштабированию.
Я бы все же рекомендовал начать изучение Django с того как она работает, а именно
детально по шагам разобрать цепочку:

Клиент > Запрос > web server > wsgi > формирование request > middleware > корневой urls > app.urls > app.views > context processors > template > response > wsgi > web server > Клиент


Запросов к БД у вас может и вовсе не быть, либо они могут быть раскиданы по данной цепочке (к примеру вo views, context proccessors или middleware).

Ваши замечания по коду учтены. Менеджер каналов создан.
Данное руководство также поправлено и дополнено.
Спасибо за фидбек.
Замечания по коду.
1) По поводу _remove, _validate_name, _clean_expired вы абсолютно правы. Спасибо. Сделаю фикс c ближайшим обновлением.
2) Задача на перевод «голого глобального словаря» в менеджер каналов также добавлена в TODO.

Starlette vs Django.
Самая большая проблема Starlette на мой взгляд это отсутствие ORM и привычных миграций. Положение спасает Tortoise ORM, но в нем также нет миграций (обещают к версии 1.0)
Как из Starlette можно «сделать привычную Django», я показал в предыдущей статье.

По поводу того стоит ли начинать использовать Starlette в своих проектах — ответ да, определенно стоит. Особенно если у вас разделены фронтенд (Vue, React) и бекенд (DRF). Запускаете +1 контейнер, выбираете нагруженную задачу и переписываете.

По поводу того что Starlette медленнее Sanic и BlackSheep, это все довольно условно (разница в десятые доли процента).

Для меня основной плюс Starlette это его продуманность. Писать на нем легко и приятно.


Проходил несколько этапов собеседования в Яндексе. Дают необычные задачи, но без практического смысла (что то из области примитивных задач для олимпиадного программирования).
Подтверждаю, что Яндекс абсолютно не интересуется опытом человека и при прочих равных в компанию пройдет вчерашний (сегодняшний) студент у которого живы в памяти матрицы и графы.
А еще там спрашивают сортировку пузырьком :)
Лично я после третьего этапа (из пяти) «отписался» от этой истории, о чем абсолютно не жалею.
haarcascade_frontalface_default.xml установится при установке OpenCv, никаких дополнительных манипуляций не требуется.

habr.com/ru/post/208092
github.com/opencv/opencv/tree/master/data/haarcascades
Прошу прощения, должно быть вот так (обратите внимание на флаг rb и отсутствие .read())

def test_detect_face():
    with open(os.path.dirname(os.path.abspath(__file__)) + '/photo.jpg', 'rb') as in_memory_photo: 
        is_it_face = detect_face(in_memory_photo)
        print(is_it_face)
Доброе утро.

1) А докер тут прямо необходим? Докер удобен. Вы просто копируете приведенный код в Dockerfile и все работает. В противном случае вам долго придется гуглить «какие же пакеты мне надо поставить на мой CentOs6, чтобы наконец то у меня сбилдился OpenCv». Это долго.

2) И связь с Django слабовата. Вы можете использовать данную функцию в чистом питоне.
К примеру:
with open('photo.jpg', 'r') as in_memory_uploaded_file: 
    in_memory_photo = in_memory_uploaded_file.read()
    detect_face(in_memory_photo)


3) Импорт из main.utils? Я специально старался не усложнять статью. Вы можете поместить функцию detect_face в любой удобный вам файл разумеется.

4) И что такое messages? docs.djangoproject.com/en/3.0/ref/contrib/messages

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity