Вы видите копию треда, сохраненную 4 августа 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Предыдущий: >>2320027 (OP)
Литература:
https://ln2.sync.com/dl/cf2c1d070#xq4s328t-xbbjys2z-9r6j7ss7-gf4e9dv6 <-- Книжки, новое собрание
Ещё книжки: https://yadi.sk/d/HQhhsBsq3TVRUq
Тоже книжки: https://yadi.sk/d/tArKKuQu3Kejuq
Больше книжек: https://yadi.sk/d/H-00n-UG3RSQem
Анон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы:
https://ideone.com/ - возможность постить листинги кода и онлайн-запуска, не требует регистрации
https://dumpz.org/ - можно постить листинги, не требует регистрации
https://pastebin.com/ - для листингов, регистрация не обязательна
https://www.codepile.net/ - можно расшарить код в том числе на редактирование, особая полезная опция - чат при каждом листинге, где можно код обсудить
https://pyfiddle.io/ - запуск python кода онлайн, но чтобы шарить, надо регистрироваться
#######################################
ЧаВо: https://github.com/TheKnightsWhoSayNi/info/wiki/Hat Актуальность примерно 2015 года
Вопросы-ответы:
— А стоит ли читать Лутца, том номер N?
Мнения в треде разделены. Кто-то за (очень неплохая база даётся), кто-то против (слишком много воды и объём книг убивает всё рвение). В общем — решать тебе, книга вредна не будет, но ты можешь её просто не дочитать и забросить.
— Стоит ли читать %книга_нейм%, если там питон версии 2.х?
Нет, не стоит. 100% есть более актуальная книга, для пистона 3.х
— А что ещё можно читать?
Питон сам по себе очень хорошо задокументирован и для уровня начинающих, и для продвинутого. Смотри официальную документацию. Можно начать вот с этого https://docs.python.org/3/tutorial/introduction.html
— Есть у кого на примете годный курс лекций по алгоритмам? Формат лекций мне как-то ближе, нежели просто чтение книги.
МФТИшный курс, например, https://www.youtube.com/playlist?list=PLRDzFCPr95fK7tr47883DFUbm4GeOjjc0
— Что можно почитать/посмотреть по многопоточности/параллелизации в питоне, да и вообще в целом?
Очень годный ролик на американском языке про многопоточность и асинхронность https://www.youtube.com/watch?v=MCs5OvhV9S4
— А как учить джангу? Нахожу только книги по джанге 1.х
У джанги отличные доки (одни из лучших для пистоновских либ, имхо), почитай их для начала. Книгу по джанге можно читать и для версий <2, это не проблема, т.к. принципы остаются теми же. Для переката на 2.х хватит changelog`a или тех же самых доков/статей. Начни изучать с разбора учебного приложения с голосовалкой из официальной документации.
— В ньюфаг-треде написано, что нужно начинать с SICP, чтобы научиться программировать
Вот, пожалуйста, та же самая программа, но переработанная под язык Python: http://composingprograms.com/ (нужно знать ангельский или уметь пользоваться переводчиком)
— Можно ли на питоне делать мобильные приложения?
Да, смотри на фреймворк Kivy https://en.wikipedia.org/wiki/Kivy_(framework) https://kivy.readthedocs.io но народ на него жалуется
— Как можно без лишней возни ускорить программу на питоне
1) проверь сначала свой код, алгоритмы и структуры данных. Чаще проблема здесь.
2) код можно иногда феерично ускорить, используя JIT (Just-in-Time) компиляцию. Почитай обязательно про модуль numba, он ставится через pip, и альтернативный интерпретатор PyPy.
— Дайте нормальные книжки на русском! Мы, блядь, не в пиндосии живём
Брат, смотри книжки по ссылкам в шапке, там есть и русские. Но помни, без языка ангелов твоя жизнь проходит мимо и ты обречён быть на обочине знаний и технологий.
ps: анон, если ты вносишь изменения в шапку, оставляй ссылку на код с обновлённым исходником.
Исходник: https://dumpz.org/bASGKD8cCFDf
Свинособака, я тебе и по-человечьи и по-свинячьи и по-собачьи пытался объяснять - ты же слишком туп чтобы понять хоть что-то
Тебе максимально наглядно была продемонстрирована работа неблокирующего асинхронного кода, loop.run_until_complete добавлен исключительно чтобы скрипт ждал и не завершался раньше времени. То что ты не понимаешь концепцию асинхронки и ивент лупа а заодно и очевидно никогда не работал с питоновским asyncio ни на одном проекте - исключительно твои проблемы. Так и сиди дальше на джанге и не лезь к нормальным людям
>Тебе максимально наглядно была продемонстрирована работа неблокирующего асинхронного кода, loop.run_until_complete добавлен исключительно чтобы скрипт ждал и не завершался раньше времени.
Ну хотя ты в целом прав в этом сраче, твой код всё равно адовый.
Это какая-то каша под питон-3.6, который официально похоронен 23 декабря 2021. А сейчас 2022 на дворе, питон 3.10 давно в релизе, а меньше чем 3.8 вообще как-то даже неприлично использовать.
Использовать loop напрямую для таких целей считается зашкваром. С loop напрямую иногда надо работать, но не так.
Твой код мог бы выглядеть так
async def main():
____a = asyncio.create_task(say('Alice'))
____b = asyncio.create_task(say('Bob'))
____await asyncio.wait([a, b])
asyncio.run(main())
В каждой ветви исполнения код выполняется строчка за строчкой и только так.
В случае системных потоков, threading, система-интерпретатор переключают ветви исполнения в произвольный момент времени. Но при этом каждая внутри себя исполняется последовательно.
В случае asyncio, переключение ветвей исполнения идёт только на операторе await, пока нет await, переключение невозможно.
А оператор await означает лишь то, что необходимо в этой строчке дождаться результата асинхронной операции, при этом можно переключиться на другую задачу.
продолжаю,
задача, Task - самый главный примитив asyncio. Аналог треда в многопотоке. Все задачи независимые, каждая живёт своей жизнью, задача планировщика переключать задачи между собой. Это происходит на операторе await, как я уже говорил.
Вызов
a = asyncio.create_task(say('Alice'))
это синхронная операция. Смысл её в том, чтобы поместить в планировщик новую задачу, после чего она начинает жить своей жизнью, как и все другие задачи. Чтобы с ней коммуницировать, надо явно использовать какие-то функции. Сам объект-задача возвращается из функции.
Сделав несколько последовательный вызовов, мы получаем несколько задач. Они смогут исполняться, как только планировщик встретит первый await, и не раньше этого.
А когда мы делаем
await asyncio.wait([a,b])
мы уже ждём, пока все задачи не завершатся. Это поведение по-умолчанию, настраивается, в доках всё есть.
мимо-ньюфаг
Если полностью самому пилить, несколько архитектур, идея общая.
1) реализуешь функцию-воркер. Точнее это сервис в виде, как описано ниже. Смысл в том, что этот воркер слушает очередь, получает из неё ссылку, которую надо скачать, возможно ещё какие-то данные, скажем номер ссылки.
этот воркер скачивает данные, и помещает его в другую очередь, точнее помещает туда какой-то тупл вида
(ссылка, код возврата, контент, что-то ещё может быть)
после этого дальше случает очередь.
2) создаёшь две очереди, для ссылок и для результата. Запускаешь десяток задач-воркеров. Пихаешь в очередь всю тысячу ссылок, а результаты сохраняешь куда надо.
Так ты получаешь асинхронность, и при этом регулируешь нагрузку.
При этом очередь можно кормить постоянно, добавлять новые ссылки на скачивание в рантайме.
Можно иначе эту же идею реализовывать. Через семафоры, например.
Без модификации для 1000 запросов плохая идея. Но можно добавить семафор, расшаренный между тасками, и выставить лимит условно в 10 для семафора.
Если список на момент запуска известен и он умеренно большой, скажем 10 тысяч ссылок-задач, но так проще всего.
Если мега-список, или он динамически дополняется, то как я описал надо >>38565
Правильно ли я понимаю, что если таски внутри себя не написаны асинхронно, то никакой выгоды мы не получим?
Это работа планировщика. Там разные типы задач, задачи, которые срабатывают по таймеру, задачи, когда ждали данных по сокетам, при системном вызове epoll, обычные задачи.
Если у тебя обычные задачи, то тупо по очереди. Задача отработала до следующего await, после него планировщик помещает её в конец очереди из других задач.
Надо исходники смотреть, я смотрел, но уже не помню.
Да, правильно. Пока не сделаешь await футуры-задачи, будешь висеть на текущей задаче.
Причём если ты сделаешь
time.sleep(10)
вместо
await asyncio.sleep(10)
то всё будет висеть тупо 10 секунд, ничего в это время происходить не будет, никакие другие задачи обслуживаться не будут.
>то никакой выгоды мы не получим?
И тут ещё. Конкурентность часто не про выгоду.
Все эти треды придумали ещё в прошлом веке, для обычных компьютеров, которые были одноядерные. Более-менее массовые двуядерные процессоры стали появляться где-то с середины нулевых.
Тебе очень часто надо обрабатывать несколько задач одновременно. Например у тебя графический интерфейс программы, которая сетевое соединение устанавливает. Без конкурентности ты не сделаешь такую программу мало-мальски адекватно. ГУИ не должен блокировать сеть и наоборот.
Или когда надо несколько сетевых соединений обрабатывать. Тоже самое. Ты просто не сможешь это реализовать в обычной однопоточной логике.
Но правда то, что в asyncio тебе надо явно разрешать переключить задачу, и если ты этого не сделаешь, всё повиснет. Или если будет синхронную функцию использовать. А с тредами всё будет работать.
Кстати работа файловой системы нативно асинком не поддерживается. Тебе надо в тредах обращение к файлам запускать, чтобы выгода была, чтобы не подвисало исполнение на ожидании данных.
> Тебе максимально наглядно была продемонстрирована работа неблокирующего асинхронного кода
Не взрыв, а хлопок. Не наводнение, а подтопление. Не война, а спецоперация по демилитаризации и денацификации. Не говнокод, а максимально наглядная демонстрация. Так и запишем
> loop.run_until_complete добавлен исключительно чтобы скрипт ждал и не завершался раньше времени
Пчел, это допотопное говно уже лет 5 не используют. Ты бы еще декоратор нахуячил
> ты не понимаешь концепцию асинхронки и ивент лупа
И это говорит человек, который утверждал о том, что футуры может создавать только сервер. Агакакскажешь
> очевидно никогда не работал с питоновским asyncio ни на одном проекте
Ты используешь интерфейс asynio про который даже в документации написано
Important See also the create_task() function which is the preferred way for creating new Tasks
Deprecated since version 3.10
Ты кому пиздишь? Себе, мне или господу богу?
> Так и сиди дальше на джанге и не лезь к нормальным людям
Ну ты хоть разок открой документацию-то, долбаеб
>>38515
Зачем ты пытаешься что-то объяснить челу, который использует деприкейтед хуйню? Он же изучал погромирование по слитым курсам скиллбокса в телеге
>>38629
С помощью epoll, по факту просто проверяет события для файла
>>38534
Все так, только стоит еще рассказать про переключение контекста и генераторы
>>38717
Попробуй сначала изучить базовый синтаксис, вот серьезно. Какого хуя вы все так рветесь написать своего первого бота? Все равно придется возвращаться и изучать циклы с условиями
>>38681
Но в чём же тогда выгода асинхронности по сравнению с тредами? Если в асинхронности нужно каждый пук делать асинхронно, чтобы всё не подвисло, а тредами проц сам управляет - получается, что треды дают более высокий уровень абстракции и проще для написания кода? Или тут кроются подводные камни?
Потому что треды переключаются постоянно и зачастую в молоко, а в случае асинкио ты сам контролируешь переключение и не рыпаешься просто так
Наибольшую отдачу асинкио даёт на сетевых задачах, потому что там в поднагодной используется специальный системный вызов, который делает коллбэк, как на сокет, где ты данные ожидаешь, что-то приходит. Это эффективнее, причём на других платформах тоже подобный подход используется. Скажем nginx так работает, и не только.
Для меня, как программиста, асинк удобнее тем, что полностью прогнозируемо, когда задача может переключиться. И практически нет проблем с критическими секциями, необходимостью ставить кучу блокировок и т.п. Для тредов умеренная проблема, если проектировать правильно, но всё-таки там это некий геморрой иногда может быть. В этом плане треды заметно сложнее.
В общем и свои плюсы, и свои минусы в каждом подходе есть.
Как её запустить из среды питона, а не через bash?
Сделал как в инструкции pip install -U gallery-dl
Всё установилось. Но ни import сделать, ни работать через gallery-dl URL не получается.
Весь пердолинг чтобы не засирать основной ликусовый питон, а оставить в виртуальной среде.
А как обчно спросил и решил сам через 5 минут. Через сабпроцес
subprocess.run(["gallery-dl", "ЮРЛ"])
я чёт думал он в другое место полезет к основному питону.
>Но в чём же тогда выгода асинхронности по сравнению с тредами?
Треды переключаются через равные интеравалы времени внезависимости от того, готова задача или нет. Если у тебя висит 10 тредов, а данные получены только в одном, то планировщик все равно пройдется по всем тредам и будет бессмысленно ждать получения данных.
Кажется, что для организации ui, например, или буферизации такое поведение предпочтительно, нет?
Да, поэтому не надо совать асинхронность где не нужно. Это замена тредам только в определенных местах.
>только в определенных местах
Ну-ка, в каких это местах треды предпочтительнее асинхронки? Питоновские треды это профанация из-за GIL, кроме как в работе с сетью они ничем не помогут, как и асинхронка. Но вот у асинхронки неоспоримые преимущества в виду отсутствия гонок/взаимоблокировок а также явные переключения контекста в ходе исполнения (пока не встретится await, синхронный код не прервется и левый таск исполняться не будет)
Блять, зумерки, хули с вами не так? Буквально на днях на проект пришел типичный 22летний мидол, уже поработал где-то и ЧСВ себе до небес взрастил. С первого же дня начал визжать на созвонах "у вас все ниправильна!! у нас по-другому было!! у вас либы устаревшие!" на предложение взять это самому в работу следовало "ой пук, ну я это... не сам же делать собирался да? я вот еще с кодовой базой не до конца познакомился, мое дело предложить..."
А вчера пилили новую репу и для нее решили вынести сервис аутентификации в отдельное приложение, чел из команды сделал это на джанго, т.к. быстро, зумерок тут же побежал в общем чате вопрошать
- А пачиму на джанго? Так никрута!
- Нам главное сделать быстро и чтобы это решение впоследствие работало как часы
- Но ведь у нас асинхронный сервис! А джанго синхронный!
- И что?
- Ну как вы не понимаете! Джанга больше 30 rps на одном воркере держать не может!
- Чел, у нас к этому сервису будет дай боже 2 обращения за токеном в день, ты о чем?
- Ну джанго это прошлый век! Так нельзя делать!
Бля... с удовольствием переебал бы этому визгливому глисту в поддых, но жаль он на ремоуте
>Питоновские треды это профанация из-за GIL
По-твоему треды нужны только для увеличения производительности? Треды не для этого придумывали.
Попробуй с ГУИ без тредов работать, например.
>Попробуй с ГУИ без тредов работать
Чел... асинхронка - стандарт для ГУИв, ты о чем?.. C# и electron.js так и работают
а десктопные ГУИ на питоне это отдельный вид извращения
>стандарт для ГУИв, ты о чем?.. C# и electron.js так и работают
> Питон тред №139
> /python/
Чел, какой стандарт? Только дохлый Киви как-то как опцию возможность предлагает. Все остальные ГУИ питона жёстко завязаны на треды.
В c# скорее тоже треды. А электрон как и питон однопоточный, там нет тредов в том виде, как хотя бы в питоне они есть. Не говоря уже про C#, C++ и Java, где треды настоящие
А в шарпе и электроне асинхронка так же устроена, как в питоне?
>electron.js
Это там где у тебя отдельный процесс на рендер программы, который обменивается данными с процессом где написала логика?
Как можно задушить змею?
Там есть опции, чтобы пускать гуи в одном треде, а асинкио в другом, и потом устраивать хитрый обмен данными между ними.
Но в любом случае это гемор дополнительный.
> Ну-ка, в каких это местах треды предпочтительнее асинхронки?
Например, если взаимодействие с сетью недолгое, на уровне 50мс. Тогда треды работают быстрее асинхронки и держат нагрузку выше.
> Питоновские треды это профанация из-за GIL
Пиздец, ты бы хоть почитал реализацию CPython. Нахуя ты пукаешь о том, чего не знаешь?
> Но вот у асинхронки неоспоримые преимущества в виду отсутствия гонок/взаимоблокировок
Зато появляется охуительный недостаток в виде блокирующего синхронного кода. И нет, вычисления на ядре ты асинхронными сделать не можешь
> а также явные переключения контекста в ходе исполнения
Это плюс, да
> Может, вы и del явно делаете, а сборщик мусора недостаточно хорош?
Ты же знаешь, что del не вызывает сборщик мусора?
Ну и значение из словаря по ключу ты иначе не удалишь, если что
> Так в чём плюс явного переключения контекста, я понять не могу?
Для каждой задачи свое решение нужно. Нет универсального идеального решения
>Так в чём плюс явного переключения контекста, я понять не могу?
Тем, что это страхует от race condition, это даёт то, что операции атомарные становятся.
>В доках прямо рекомендуется ставить await asyncio.sleep(0)
Не помню такого в доках, хотя подход известный. Это костыль, который нужен, когда ты делаешь большую вычислительную работу, и надо иногда давать возможность другим задачам что-то посчитать.
Обычно же вычислительная работа небольшая, но зато хватает асинхронных вызовов, и поэтому такой проблемы нет.
Если же у тебя вычисления, то вероятно стоит думать о том, чтобы выпихнуть их или в отдельный тред, или вообще в отдельный процесс.
>Не помню такого в доках
https://docs.python.org/3/library/asyncio-task.html#asyncio.sleep
>Setting the delay to 0 provides an optimized path to allow other tasks to run. This can be used by long-running functions to avoid blocking the event loop for the full duration of the function call.
Прямо не рекомендуется, но я считаю, что если так делать не стоит - этого либо не должно быть в доках, либо должно быть с явной пометкой "не надо так", а если есть в доках без осуждения, то это типа считается норм практикой.
Как определять тип дженерика, если тип является коллекцией?
Для простоты возьмём list, нужно мне проверять list, который класс, и List, который аннотация, отдельно?
Как определить, что дженерик в листе является потомком определённого класса?
Это нормальный паттерн, но он нужен в редких случаях, явно тут сказано про "long-running functions".
Ты должен применять с умом, чтобы, например, не было слишком частых вызовов. Операция переключения задач довольно дорогая, если на каждой итерации цикла из 10 миллионов итераций ты будешь такой вызов делать, ты просто уложишь всю производительность в ноль.
Не очень понятно, что тебе надо. В первую очередь когда и зачем ты хочешь проверять типы.
Проверка в рантайме это одна история. Проверка статическая, через mypy, это другая история.
В целом ты можешь описывать "протоколы", набор методов, которые тебе нужны, чтобы соответствовать требованиям. При этом при описании типа не нужно явно описывать, что тип реализует протокол, питон сам это поймёт. Коллекции всякие это тоже варианты протоколов.
Питон сам знает, что list реализует List, поэтому в джереник с типом List ты можешь спокойно подставлять list.
>В первую очередь когда и зачем ты хочешь проверять типы.
Мне нужен датакласс, который может инициироваться со словаря. В том числе со словаря со вложенными структурами. Но пока ограничусь словарями, которые получаются из джейсонов.
Для этого нужно пробежаться по полям датакласса и определить, какие из них являются опциональными и какие - потомками класса Entity. Есть inspect.isclass(), но ещё нужно определить, что класс является потомком Entity и соответственно иницировать его классовый метод на поле словаря.
Но самая ёбля это определять список из потомков Entity.
Всё равно не очень понятно. Ты со штатными датаклассами работаешь?
Возможно тебе нужен pydantic или attrs+cattr
Они как раз для того, чтобы в рантайме верифицировать типы.
Как я понимаю, цикл из 10ккк итераций вообще не должен быть внутри асинхронного участка кода, разве нет?
Decimal
Смотря что ты делаешь и зачем.
Может быть тебе только и надо, что один такой цикл считать, а через сеть ты мониторишь состояние вычислений и корректируешь его.
Но эта же история и в обычных однопоточных синхронных задачах, когда ты в цикле ставишь скажем печать результата один раз в миллион-миллиард операций и т.п.
А так да, если у тебя сервис, в котором есть тяжёлые вычислительные задачи, то скорее всего надо их выносить в отдельный процесс и уже коммуницировать с ним, высылая асинхронно задания в него и ожидая результат, тоже асинхронно.
Спасибо, чел, что уже несколько дней поясняешь, как надо.
Запутался тут в одном моменте в джанго. К примеру, пользователи могут оставлять комментарии к статье и ответы к этим комментариям. И ставить лайки или дизлайки и к комментам, и к ответам на комменты. Соответственно у меня будет 3 модели: ответ, коммент и лайк. Но как сделать, чтобы у лайка была ссылка на пост, к которому он сделан? Ну то есть это может быть либо одна модель, либо другая, но не обе одновременно. Или в модели лайка сделать 2 поля ну и просто одно из них будет всегда пустым?
Или нужно делать для комментов и ответов отдельные модели для лайков?
У меня был говнокод с фром ткинтер со звёздочкой, и так нельзя (по крайней мере я так понял, что лучше не делать, чтоб не иметь конфликтов с вызовами функций).
Собственно, как шлёпать сами формочки я сносно разбрался. Ппробовал PAGE, но мне сейчас он не нужен для учебных целей так сказать.
Если поставить Label.t (сейчас я убрал везде), то работать не будет. Я что-то не так делаю, или фундаментально не понимаю. В других местах похожее всё работает.
Если в коде снизу поменять на фром ткинтер звёздочка - то будет работать.
https://pastebin.com/LGZPyztG
Какая с какой? Модель лайка состоит из автора, реакции (лайк или дизлайк) и внешнего ключа поста. Но моделей постов две.
Ну я так понимаю надо для каждой модели поста делать свою модель лайков, типа как ещё. Не могут же у меня в одном поле бд храниться ссылки на разные таблицы.
Единственный вариант это сделать так, чтобы было две модели лайков.
Одна модель лайков к статьям, вторая модель лайков к комментариям.
Вот смотри что у тебя в коде
> import tkinter import t
> import math as m
Что ты пытаешься в первом импорте сделать? Второй импорт корректный, хотя вот лучше так не сокращать, очень дурной стиль, лучше просто делать import math
Для tkinter принято, насколько я помню, импортировать как
import tkinter as tk
Это общепринятое сокращение
Далее ты вызываешь как
tk.Label, tk.Button и т.п.
> Что ты пытаешься в первом импорте сделать? Второй импорт корректный, хотя вот лучше так не сокращать, очень дурной стиль, лучше просто делать import math
Хорошо, это понял.
> Для tkinter принято, насколько я помню, импортировать как
> import tkinter as tk
А, понятно. А где почитать про эти "принято"? Мне пип8 советовали.
Это просто сокращение, принятое среди использующих его программистов. Прочитать это можно в чужом коде.
Где б его посмотреть. В интернете только совсем говнокод с import *
Так а нахуя тебе 3 модели? Хватит 2-х
Одна - комментарий, вторая - лайки
Ответ - это тот же самый комментарий, в котором есть ссылка на "родительский ответ" a.k.a. комментарий.
Тогда и мозгоебли, которая у тебя возникла, не будет
Есть вот такой орм запрос posts.objects.all().order_by('-date')[:5]
то есть 5 последних постов самых новых по дате.
Но они выводятся в обратном порядке (31.01, 30.01), а мне нужно последовательно по дате (30.01, 31.01)
order_by('-date)[:-5] вот так не работает, отрицательное индексирование не поддерживается
Как в нужном порядке получить?
Ну не, это я для примера написал, на самом деле у меня отзывы про товар и комментарии к отзыву. То есть отзыв и комментарий не идентичны. Отзыв содержит ещё оценку.
>Всё равно не очень понятно.
Что непонятного? Что хочу инстансы датаклассов создавать из джейсонов?
>Они как раз для того, чтобы в рантайме верифицировать типы.
Мне не нужно ничего верифицировать, по полям я пробегаюсь, чтобы определить, какие поля являются инстансами/списками инстансов предков Entity, чтобы вызвать их классовый метод инициализации с сответствующим ключём словаря.
Есть ощущение, что ты пытаешься изобрести свой собственный pydantic.
Эта библиотека как раз нужна для того, чтобы в рантайме создавать объекты по описанным моделям.
>Ну не, это я для примера написал, на самом деле у меня отзывы про товар и комментарии к отзыву. То есть отзыв и комментарий не идентичны. Отзыв содержит ещё оценку.
"Отзыв на товар" - тот же комментарий, у которого нет родительского комментария, но есть оценка. А у комментария есть ссылка на родитель, но нет оценки.
Ну так и разные модели значит получаются, разве нет? Или это норм такие разные сущности с похожими полями в одной таблице хранить?
Прост у меня там потом ещё будет другой тип товаров, который будет содержать все поля нынешнего типа товаров, плюс будут ещё дополнительные, специфичные для этих товаров поля. Ну и я тоже думал делать для него отдельную модель.
>Есть ощущение, что ты пытаешься изобрести свой собственный pydantic.
Вот только я не собираюсь валидацию полей словаря проводить при каждой инициализации, так что пидантик тут оверкил.
Вот приходит тебе жсон. Твои действия? Верить, что он корректный?
Есть ещё пакет attrs, и дополнительно к нему catts, тоже примерно для этих целей.
По описанию, ты хочешь делать какие-то модели, а для этого есть решения. Датаклассы это лишь минимальный функционал, который решили внести в стандартную библиотеку. Насколько помню, сделали его разработчики attrs.
Есть и серьёзный функционал, но во внешних библиотеках.
>Ну так и разные модели значит получаются, разве нет?
Разные модели, которые отличаются полем? Они может для питона разные, но для БД это одна и та же таблица с двумя опциональными полями.
>Или это норм такие разные сущности с похожими полями в одной таблице хранить?
Так это не разные сущности для БД.
>Прост у меня там потом ещё будет другой тип товаров, который будет содержать все поля нынешнего типа товаров, плюс будут ещё дополнительные, специфичные для этих товаров поля.
Что-то ты там пытаешься нахуевертить непонятно. Скорее всего джанговская ORM обосрётся реализовывать твои фантазии. Поупырь свой мел и сначала реализуй таблицу/схему для товаров без специфичных полей для товара.
>Вот приходит тебе жсон. Твои действия? Верить, что он корректный?
Джейсон приходит с бд/кэша, который трансформируется в словарь. Вот мне и нужно написать класс, который может инициализироваться со словаря, заместо перекидывания словарных литералов по всей кодовой базе.
>Поупырь свой мел и сначала реализуй таблицу/схему для товаров без специфичных полей для товара.
Ну так я сейчас это и делаю. Пока что у меня только один вид товаров, отзывы к ним, комментарии к отзывам и лайки для отзывов и комментариев.
Но вот типа если магазин продает там резиновые хуи и пезды, будут отдельные модели для хуев и пезд или одна? Типа у них схожие поля типа производитель, материал, цена, но разные типа длина/глубина, специфичные для каждого вида товара. А что если категорий ещё больше? Получится, что у каждого товара будет дохера бесполезных пустых полей. И при этом нельзя будет задать поле с нужной информацией обязательным для заполнения, потому что обязательная длина для хуев не должна быть пустой для пезд.
Также и для этих комментариев. Получается оценка будет не обязательной, если все в одной таблице будет. Но отзыв не должен быть без оценки. Ну хз, мб это и не такая уж проблема конечно.
У нас сейчас импортозамещение. Всё правильно ты делаешь
=======
cat русификация.py
import builtins
builtins.печатать = print
========
cat яумамымолодец.py
def напечатать_привет(имя):
____печатать(f"Привет, {имя}")
=============
cat главный.py
import русификация
import яумамымолодец
яумамымолодец.напечатать_привет("Вася")
===============
python3 главный.py
Привет, Вася
===============
Кстати, вопрос, можно ли каким-нибудь образом русифицировать операторы? Просто библиотекой, а не собирая свой собственный питон из исходников?
Вот чтобы все эти import, for, if-else и т.п. по-русски были?
Похоже завтра с нашего проекта будут увольнять токсичного ублюдка-лида. Буквально 2 недели назад к нам в проект пришел какой-то выебистый зумерок, на позицию лида канешн. Общался со всеми крайне вызывающе, постоянно намекал что код гавно (ладно бы только это) и что все мы - гавно. Очень часто начинал свои "просьбы" с предъяв, по итогу умудрился получить жалобы к начальству не только от нас-разрабов но еще и от ПМа (как он с ним посрался, не ебу, но он талантлив в этом).
Держку кулачки за то, чтобы этого мудилу выпизднули куда подальше.
>Получается оценка будет не обязательной, если все в одной таблице будет.
Ты пытаешься натянуть бизнес-логику на структуры в БД. По факту у тебя отличие между отзывом и ответом в одном поле, относительно друг друга. Как ты будешь реализовывать эту логику в приложении, это уже от тебя зависит, но для бд - это сорта камментов к продукту.
posts.objects.all().order_by('date')[:5]
Ну почему, отзыв ещё относится к товару, а коммент к отзыву, получается тоже в одно поле не запихать.
scipy.stats.mode
Ну я тут нагуглил в общем полный гайд по этой теме, надо подумать канеш.
https://realpython.com/modeling-polymorphism-django-python/
По полю parent_id, если его нет, то это отзыв.
Не страдай хуйнёй. Объединять разные по сути вещи в одно это очень дурной стиль, лучше иметь разные модели, чем кучу if-else в дальнейшей логике, причём на всех уровнях, как в обработчике моделей, так и во вьюшках.
Это больше к вопросу о разнице между отзывами и комментариев к ним.
Если же разнородные товары в магазине, то может стоит объектным образом реализовать. То есть ты не описываешь каждое поле отдельно, а создаёшь JsonField или как-то так в джанго. Эти поля имею поддержку в современных БД, например в постгресе.
Тогда ты сможешь реализовывать кастомную логику, дополнительные атрибуты.
Как можно использовать Pyjion? Я честно говоря не понял. Можно ли с его помощью запускать код на питоне на дотнете?
https://github.com/tonybaloney/Pyjion
>Не страдай хуйнёй. Объединять разные по сути вещи в одно это очень дурной стиль, лучше иметь разные модели, чем кучу if-else в дальнейшей логике
Действительно, лучше иметь кучу таблиц, описывающих одни и те же сущности, а если кучу if...else спрятать за фабриками, то это не считается и вообще настоящее ООП.
>так и во вьюшках.
Видно типичного пердолика, у которого даже вьюхи должны повторять структуру таблиц БД. Такие обычно сразу <table> в разметку вставляют, когда нужно отобразить список чего-то, потому что ведь БД же реляционная, а значит должна быть таблица! И пагинация оффсетами.
>Эти поля имею поддержку в современных БД, например в постгресе.
Джейсон поля имеют "поддержку" не означает, что по ним можно обычные процiдурки, типа индексации, проводить. В контексте товаров данные в этих джейсонах нихуя не будут "положил и забыл, фронт разберётся", их как минимум нужно будет фильтровать по значениям ключей.
>Джейсон поля имеют "поддержку" не означает, что по ним можно обычные процiдурки, типа индексации, проводить.
Поле jsonb в постгресе позволяет проводить индексацию. Я посмотрел, что пишут, и джанго можно заставить индексировать эти поля, но руками что-то делать придётся, через ручные миграции.
>>- Ну как вы не понимаете! Джанга больше 30 rps на одном воркере держать не может!
Запускаешь через gunicorn 100500 воркеров go brrrr
А действительно, зачем там джанга? Такой ебенячий комбайн для одного сервиса аутентификации не нужен. Это как спринг на каждый пук тащить.
какую книгу посоветуюте новичку, а также как оцените книгу зеда шоу "легкий способ выучить питон"
Почему при калибровке и использовании undistort получаются мегакривые избражения? Настолько сильное искревление или хуево калибрую?
А почему Django взяли, рил? Flask же тоже хуяк-хуяк и в продакшн, да тот же FastAPI с готовой авторизацией и асинхронкой. Вы же ленивые макаки
Есть большой синхронный код (написанный не мной, а дата майнерами), который выполняется 200мс нагружая CPU. Хочется получить от сервиса 50 rps.
В текущей реализации я напердолил aiohttp + multiprocessing: втупую запускаю вычисления упакованные в объект в пуле и авейчу результат. Получается около 10 rps без тормозов на 4 ядерной машине.
Но я уверен можно сделать гораздо адекватнее. Ведь скрипт перед вычислениями постоянно делает одну и ту же инициализацию соединений с бекинг сервисами, например, которых можно избежать.
Хотелось бы как-то заспавнить инициализированные инстансы с синхронными вычислителями и не перезапускать их слишком часто (только если исключение или очень редко для защиты от течки) и так же асинхронно общаться с ними.
Как это сделать? Не укажешь направление, анон?
Всё зависит от логики, какие у тебя данные, и вот особенно что это за инициализация с бэкенд серверов.
Я бы по возможности плясал от архитектуры вычислительных узлов, когда ты создаёшь вычислительные ноды, которые запрашивают задание у сервера и потом отдают ему результат.
Ноды ты можешь стартовать и через мультипроцессинг, и как внешнее приложение. А упрвляющий скрипт на aiohttp будет задания раздавать и собирать.
>Всё зависит от логики, какие у тебя данные, и вот особенно что это за инициализация с бэкенд серверов.
Если б я до конца понимал что там происходит... формально я даж не пограммист, а "devops"
Имею ввиду коннекты к базе и кешу переустанавливаются почем зря при каждом запуске объекта в multiprocessing пуле. Как в похопе 25 лет назад. И какие-то прочие накладные расходы очевидно появляются. Типо запуска подпроцессов или передачи всего вычислительного объекта в процесс, хотя минимально достаточно только запрос/ответ пропихивать, а объект может работать вечно и быть запущенным заранее.
>можешь стартовать... как внешнее приложение
Как раз недавеча закончил подобный master/slave сервис, только еще хуже, со спавном докер контейнеров вместо процессов (нужен был отдельный сетевой неймспейс для каждого потока)... наелся сполна. Поэтому сейчас хочу как-то нативно, без изобретения велосипедов, каким-нить готовым модулем. Чтобы "фигакс", "фигакс" и продакшон.
Хочу освоить ботоделие в телеге, почитал чуть, понял, что чаще всего на питоне пишут, пореже на жс, ещё реже на остальных.
Так вот: если я немного могу в жс, но есть ли резон под тг-ботов тратить время и осваивать питон? Типа стоит ли игра свеч, есть ли какие-то очевидные преимущества в питоновских либах, или всё одна хуйня?
Нужно внутри очереди организовать наборы тасков которые будут идти строго последовательно, т.е пока первый не завершится, второй не начнется. У него есть настройки приоритетов, да, но мне нужно динамически создавать эти группы через apply_async как это делается в aws при передаче message group id. Есть вариант создавать и гасить воркеры, но это выглядит не очень надёжно и хотелось бы его решать gevent воркерами.
Сам доступ к aws есть, но опросы идут долго поэтому хотелось бы через redis, не rabbitmq.
Сам сервис занимается передачей обычных сообщений, очереди нужны чтоб организовать последовательный порядок обработки в пределах одной группы сообщений которые маркируются своим id. Таких групп может быть сотни. Сами сообщений обрабатываются в реалтайме.
Очень не хочется писать костыли, но решений так и не нашёл.
>Имею ввиду коннекты к базе и кешу переустанавливаются почем зря при каждом запуске объекта в multiprocessing пуле
Сколько я представляю, ты не можешь передать коннект в другой процесс. Даже если fork сделаешь. Коннект привязан к процессу, к его PID, этот PID можно посмотреть через netstat.
Поэтому только вариант, чтобы передавать данные в дочерние процессы, а коммуникацию делать из основного.
Я бы делал в HTML и дальше перегонял бы в pdf.
Правда наиболее адекватные тулы использовали внешний wkhtimtopdf, были обвязкой над ним были.
Сейчас глянул, вроде есть и нативные трансляторы, но судя по описанию примитивные, я сам их не пробовал. А если вёрстка сложная нужна, то нормальный тул нужен.
Слишком простая книга, на мой взгляд, лучше пробегись по его вводному курсу(питоновскому py4e который) за пару-тройку недель, там материал этой книги покрыт и есть нормальные упражнения с ответами(сначала пытаешься сделать сам - потом смотришь код препода). Чарльз гениальный лектор в первую очередь. А в качестве вводной книжки возьми Think Python, за месяц-полтора прочтешь, если не работаешь/занят чем-то.
тоже не то, или я не совсем разобрался как это работает
вот такое решение подсказали
count = .....objects.all().count()
......order_by('date')[count-5:]
Это верно. Но это не вызывает никаких вопросов. Ведь сокет для того и нужен, что бы ядро могло знать какому (одному) процессу доставить пакет.
Проблема то в другом, то что нет готового модуля, которым я бы мог запускать питонячий код в качестве подпроцессов и нормально с ними общаться: подкидывать задания для вычисления без перезапуска самого процесса (и переинициализации кода вычислителя). Нормально - это я подразумеваю что не через stdout/err, shared memory, unix soket'ы и т.д. из 70тых, я хочу современных высокоуровневых абстракций для обмена данными, ради чего я и пришел в питон - чтобы делать вещи быстро. Еще хочу получать от работающего процесса нативные исключения, а не stderr. Вообщем то все. Я сильно много прошу?
Если питон не располагает такими уже готовым к использованию абстракциями, то получается он не претендует на лучший инструмент для написания обвязки запускающей питон код. Это странно, имхо.
Если делать то что я хочу в Питоне руками: пердолиться с fork/unix сокетами или subprocess/std(out|err), то получается проще писать на go, в котором это все так же есть, только работает быстрее и жрет меньше памяти, т.е. даже лучше.
Если есть выбор между классом или функцией, то предпочтение отдают функции и в питоне советуют писать функции.
Но и классы стороной обходить не надо. Без них многие вещи не сделать.
> предпочтение отдают функции и в питоне советуют писать функции
Хм, почему? Я в контексте питона как раз слышал наоборот, что надо писать именно на ООП, а функции - мол, бессмысленная бесперспективная хуйнюшка.
Как path типа [2,0,1] преобразовать в дерево словарей с чилдренами? Может какая-то либа есть для этого? Или sqlalchemy это умеет?
Охуенный план.
Но даже если так, зачем программисту твои 10к, если он может написать бота, который приносит пассивный доход?
Потому что классы сложные, а функции простые. А делать надо просто.
Доставьте обоину где питон с белом круге на красном фоне, все это помотивам свастики
Бамп вопросу.
Как же хочется ...
Если тебе в питоне они нудны, значит ты что-то делаешь не так и это надо бы сделать по другому
Смотри на модуль array, раз уж так хочется, можно через него работать с такими типами.
Вот
у
ви
ди
ти...
все вакансии опубликованы 23 апреля..
опрос
500к есть кто получает и больше.
Чем занимаетесь на работе. Как так получилось? а то я уперся в 300к и дальше говорят иди в тим лиды
Только тимлиды и еба архитекторы в крупных проектах. Во второые пробиться сложно, с первыми оверэмплоить не получится потому что будет созвон на созвоне через созвон. У меня даже на мидловой позиции приходится сливаться и выбирать приоритет между созвонами в определенные дни.
>что это за работа на 500к на одной ставке
просто сеньор на удаленке на западного барина, 500K это всего где-то $40 в час, для них это не деньги даже
Гвидо является нацистом?
Все так. Бандеровский язык. Вот взять логотип Ruby - он красный, как флаг СССР. Сразу видно, что создатель этого языка был коммунистом. Не смотря на то, что во время войны японцы были на стороне Гитлера.
Надо бы запретить эту змеюку подколодную, а нейросети можно писать на православном 1Скрипт:
https://github.com/EvilBeaver/OneScript
Если что-то ложное, то зачем это объявлять истинным? А если истина, то зачем объявлять это ложью?
Нет, не пойдет. Помимо основ питухона и самой джанги надо понять тему API, изучить DRF, алгоритмы и структуры, Docker, и тогда МОЖЕТ БЫТЬ появятся шансы попасть на собеседование на джуна.
Потому иногда так удобнее для человеческого сознания. Например:
Если завтра не будет дождя, то пойдём купаться.
Потому что это должно быть понятно любому здравомыслящему человеку. По крайней мере, так считают лекторы, которые туеву хучу лет шарят за это, а тут им неочевидно что бывают непонятны вещи, которые для них элементарны
Это просто разные вещи, результат операций будет разный.
>>> not ''
True
но
>>>'' == False
False
равно как
>>> '' == True
False
Нет, стоп. Я помню, что недавно какую-то задачу переписывал на not.
Вспомнил. Стек по принципу LIFO. И там короче пришлось переписать
if len(self.values) == 0:
на
if not self.values:
https://ideone.com/ob91Uf
Так что я слегка перепутал.
class Statuses(str, enum.Enum):
----PENDING = 'pending'
----COMPLETED = 'completed'
Зачем так? Почему просто Enum сделать нельзя?
Что бы можно было делать так
Statuses.PENDING == "pending"
А не так
Statuses.PENDING.value == "pending"
А так же для форматирования строк
Я понимаю примерно, просто я теперь еще понимаю, что я проходил курсы от каких-то сишников и меня учили что == False и всякое такое это норма, а Пепа на это ругается.
>я проходил курсы от каких-то сишников
Да ты считай никакие не проходил. Т.к. в голове у тебя полная каша.
Раньше и каши не было.
Я короче целый год хуярил конструкции вроде if not dick: do_fuck(), ну т.е почти никогда не проверял явно на None.
И только сегодня совершенно случайно узнал, что оказывается None не имеет ничего общего с [0, False, ""]
> что нужно делать?
писать скрипты для дискорда, телеги, какую то простую автоматизацию реализовывать
1. Сервер работает на 1.1 версии хттп? Это же очень старая реализация, почему не 2.0?
2. Почему у гет-запросов каждый раз разные порты? Клиент же один. Или система просто берет рандомный свободный порт из всего пула? Почему тогда не взять какой-нибудь 1488? Он у меня тоже не занят.
>1. Сервер работает на 1.1 версии хттп? Это же очень старая реализация, почему не 2.0?
А нахуя тебе 2.0 за пределами мокрых писечек на вебсокетах? Если не понял, то 2.0 - бинарный стрим, и хуй бы ты такие няшные логи в соснолечке наблюдал на два-точка-ноль серваке. Ну и то, что стримы не кешируются, делает их непригодными для большей части интернета.
Меньше года.
Вот про это вообще не знал. Про бинарные стримы, кеширование и т.д. - где такую инфу вообще искать?
>А нахуя тебе
В моем представлении - если у приложения/соглашения/етс появилась новая версия, то значит, на это есть какие-то причины. Функционал, безопасность, удобство использования и т.д. Зачем тогда 2.0 сделали таким, что он непригоден для большей части интернета?
спасибо, понятно куда двигаться теперь
>где такую инфу вообще искать?
В спеке. Но этот видосик, рассказывая про дыры хттп2, заодно рассказывает и о разнице между ними:
https://www.youtube.com/watch?v=sI6YS9a7Qyg
Про кэш в спеке ничего не говорится, но стримы в целом не кэш-френдли. Или точнее сказать сервер сам должен пердолить реализацию кэша стримов для своей бизнес логики.
>Зачем тогда 2.0 сделали таким, что он непригоден для большей части интернета?
Потому что его делал гугл для своих задач, причём с обычным пердольным подходом "а давайте сделаем бинарный протокол чтобы БЫСТРА!". Он "быстр" в том плане, что за оптимизацию запросов нужно платить усложнением архитектуры. Но большинство сайтов интернета - не мегайобы с миллионами запросов в секунду, а вполне стандартные статичные хтмл странички, дёргающие API сервера клиентским скриптом.
Имеют
Читай про xpath
и дальше можешь делать что-то вроде
root.findall(".//Data") # все элементы Data на любом уровне
root.findall("./Table/Row/Cell/Data") # можно детально прописывать пути
Читай в общем доки про xpath. Питон хорошо поддерживает сейчас, сторонние либы не требуются. В древние времена нужен был lxml для этого.
424x221, 2:08
Ansible на питоне, Docker CLI тоже на питоне, вот и думай
Есть же книжка какая-то в телеге 22года про питон и ДевоПёс
'Python и DevOps: Ключ к автоматизации Linux.'
Ссылка по книгам не открывается нихуя.
Какая топ книга для вкатывальщика на русском языке?
Лутц устарел на 3 минорных версии интерпретатора, все свежее в блогах на английском и в ChangeLogs интерпретатора.
Удачи.
Хочу вкатиться в Питон для фриланса, до этого баловался немного и базовые вещи знаю.
Реально ли освоить его и сопутствующие вещи за ~6 месяцев и 4-6 часов в день (с 1-2 выходными) для создания чат-ботов для телеги/дискорда, парсеров и прочих подобных вещей попроще (не бэкенд)? Разумеется, если не ленится и прикладывать усилия.
Чел, не "лучше сразу третий учить", а "нужно третий учить". Двушка уже давно в архиве, единственное, зачем её изучать - это чтобы понимать древнее легаси (но нахуй тебе это гавно).
Чтобы быстро бегать на 100 метров — нужно быстро бегать на 100 метров.
Матчасть изучил и далее по нужной задаче двигаешься, по ходу гуглишт смотришь
a = [5]
= a
print(b) // 5
Это что, это как, это как называется? Если в списке a больше или меньше одного элемента, то выкидывает ошибку. А как оно квадратными скобками список в число превращает, да на уровне переменной?
list destructuring
https://devtut.github.io/python/list-destructuring-aka-packing-and-unpacking.html
https://stackoverflow.com/questions/24999875/python-assignment-destructuring
a = [5, 7]
[ b, c ] = a
print(b) // 5
print(c) // 7
Поподробнее можно?
Привет двачик, привет программеры.
Горит ссессия. у кого есть возможносоть мне помочь ?
вот что нужно :
Разработать приложение, которое просматривает папки с именами от «1» до «9», находящимися в том же каталоге (в той же папке), что и приложение, и формирует полный список текстовых файлов (файлов с раcширением «*.txt»). Формируемый список должен включать полные имена файлов. Некоторые папки могут отсутствовать (например, имеются папки «1», «2», «4», «ABC»; приложение должно сформировать списки файлов только из папок «1», «2», «4»). Для контроля наличия папки использовать стандартную функцию DirectoryExists(Directory). Параметр Directory – имя папки, существование которой проверяется. Функция возвращает ИСТИНА, если указанная папка существует.
По команде пользователя приложение формирует индекс для списка ключевых слов для всех файлов. Список ключевых слов должен храниться в файле «KeyList.txt», который должен находиться в одной папке с приложением. Формат файла: одна строка – одно ключевое слов. Приложение читает этот файл при старте. Индекс формируется по частичному соответствию (т.е. ключевое слово может входить как часть другого слова, например, ключевое слово «заказ» будет входить как часть в слова заказы, заказано и т.п.) ключевым словам. Регистр ключевых слов и слов в файле может различаться. После того, как индекс сформирован, пользователь указывает (выделяет в списке) ключевое слово и выполняет поиск файлов, в которых встречается это ключевое слово. Двойной щелчок на имени найденного файла должен открывать окно с этим файлом и выделенным ключевым словом ближайшим к началу файла.
желательно бы просмотреть потом вместе результат.
Отблагодарю как смогу,я студент не особо подкрепленный в финансовой части.
> Индекс формируется по частичному соответствию (т.е. ключевое слово может входить как часть другого слова, например, ключевое слово «заказ» будет входить как часть в слова заказы, заказано и т.п.) ключевым словам
Пиздамба
>Разработать приложение, которое просматривает папки с именами от «1» до «9», находящимися в том же каталоге (в той же папке), что и приложение, и формирует полный список текстовых файлов (файлов с раcширением «*.txt»). Формируемый список должен включать полные имена файлов. Некоторые папки могут отсутствовать (например, имеются папки «1», «2», «4», «ABC»; приложение должно сформировать списки файлов только из папок «1», «2», «4»). Для контроля наличия папки использовать стандартную функцию DirectoryExists(Directory). Параметр Directory – имя папки, существование которой проверяется. Функция возвращает ИСТИНА, если указанная папка существует.
Легко.
>По команде пользователя приложение формирует индекс для списка ключевых слов для всех файлов. Список ключевых слов должен храниться в файле «KeyList.txt», который должен находиться в одной папке с приложением. Формат файла: одна строка – одно ключевое слов. Приложение читает этот файл при старте. Индекс формируется по частичному соответствию (т.е. ключевое слово может входить как часть другого слова, например, ключевое слово «заказ» будет входить как часть в слова заказы, заказано и т.п.) ключевым словам. Регистр ключевых слов и слов в файле может различаться.
Если можно прикрутить постгресс, то там это встроенное. Средняя сложность.
>После того, как индекс сформирован, пользователь указывает (выделяет в списке) ключевое слово и выполняет поиск файлов, в которых встречается это ключевое слово. Двойной щелчок на имени найденного файла должен открывать окно с этим файлом и выделенным ключевым словом ближайшим к началу файла.
Я в гуи не умею, не могу оценить.
>Если можно прикрутить постгресс, то там это встроенное. Средняя сложность.
Постгрес для этого не нужен совсем. И задание не про это.
Надо просто считать сначала список ключевых слов, привести их к нижнему регистру. Потом считать файл, привести тоже к нижнему регистру, и для каждого ключевого слова проверять тупо вхождение его как подстроки в строку (всё содержимое файла). Задача лёгкая.
Нужно ли как-то хранить индекс не сказано. Но можно любым способом просто сохранить.
Самое заморочное тут гуи, потому что надо уметь с гуи работать и вообще тут какая-то динамика при этом есть.
>Для контроля наличия папки использовать стандартную функцию DirectoryExists(Directory)
Чел, а ты уверен, что это по питону задание?
>Потом считать файл
А, файл уже дан. Я думал, его самому сформировать надо, то есть все корни из текстовых файлов достать (сам бы я это делать не стал, поэтому постгрес)
>Справочник функций и процедур Delphi: DirectoryExists
>Directory.Exists(String) Метод (System.IO) | Microsoft Docs
>DirectoryExists - Free Pascal
Так блядь
Наверное, там с гуи попроще, не кроссплатформа же.
Бамп. Наверное, будет проще написать свой воркер и юзать редис, чем пытаться решить проблему.
Такая практика часто используется?
Регулярно.
В конце концов, откуда-то же появляются разные технологии для решения одной задачи?
Прочел почти всю книгу с пика, порешал задачи, это было ~2 года назад, сейчас собираюсь начать заново + немного могу в SQL. Алгоритмами, regex и прочим подобным не интересовался
> Алгоритмами
Чел, базу знать обязан без нее я хуй знает что ты там писать будешь хорошо если n2
нет, такое только темные маги могут
Так и сделал. Получилось удивительно мало строк. Даже хз. И память вроде не выжирает. Завтра потестить основательно надо будет
>>46077
>>46180
ребят, я понимаю что бессмысленно просить от вас кураторства по данному вопросу, но помогите хотя бы с направлением. я по натуре художник, а не вот это всё, что поделать приходится учить не интересную хуйню, кисточки меня не прокормят, настроился изучить хоть базу, чтобы представлять дальнейшие пути развития, но материала очень много. Курю гайды, а там переменные и функции, подскажите какой этап обучения мне даст достаточно навыков, чтобы нарисовать прогу с интерфейсом как на пике.
Вот у меня лежит гайд на десктопе с данными видео :
>алгебра и операторы до if
> строки и манипуляции с ними
> списки и работа с ними
> кортежи
> модули
> парсинг
> консрукторы наследование
> полиформизм
> декораторы
>лямбда
>регулярные выражение
скюэль
> заканчиваются уроки на теме зипфайл
уроков около 50 шт, перечислил хардлайнеров. мне хватит этой инфы разобраться что от меня хотят ?
Что ещё покурить ?
Тебя интересует
оператор if
цикл for
работа с файлами в операционной системе (os.walk, os.path, open)
поиск в строке (str.find)
списки (потому что ты будешь составлять список)
Этого хватит, чтобы сделать первые два пункта. Как сделаешь, возвращайся, будем дальше курировать твою работу.
спасибо :з
У тебя в задании еще не сказано что именно от тебя требуют в плане GUI (точнее сказано, но расплывчато). Если есть возможность спросить на каком именно фреймворке преподу предпочтительно написать интерфейс - обязательно спроси.
такаядрянь = пасс 1 ёбаразделитель пасс 2
субпроцесс.попен(такаядрянь, и далее)
query-параметры не так передаются. Не помню что там точно, к этому говну больше 2х лет не притрагивался
У меня есть большой набор из условно говоря десяти блоков вопросов. В каждом блоке я отбираю несколько вопросов. Как в итоге составить "билет" из отобранных вопросов?
Математику отбора я сделал (онаа сложна и не имеет значения), но вот как сделать, чтоб у меня генерировался билет.. у меня ещё вопросы с картинками и всё такое, банально в вордовском файле валяются. Я на данный момент знаю, какие именно нужно подправить и куда.
В каком виде в питон это всё нужно загнать, чтоб это реализовать?
А ещё не забудь спросить на какой машине делать, репу, ветку, ключи, докер конфиги, версии и requirements. А и ещё тз подное попроси.
Пока не ответят, даже не начинай делать
Параметры в urls не прописываются. Ты их должен брать через request.GET.get()
Как сделать словарь, чтоб ключом были элементы списка, а значением их количество в списке - {1:2,3:2,2:2,7:1,6:1} ?
вот так чтоб было
Я супер ньюфак, помогите
Все так
>такаядрянь = пасс 1 ёбаразделитель пасс 2
>субпроцесс.попен(такаядрянь, и далее)
пощади...
Нахуя тебе в одну?
Становись автотестером
Везде предлагают xml.etree, но он мало того, что хитровыебанный до жути, так его ещё и питоновские доки не рекомендуют
Веб это самый простой вариант. Если брезгуешь, то значит проблем с поиском работы у тебя нет
А что ты хотел. Я тут недавно задумался, сколько народу в год впускается с вузов в том же ДС и просто охуел от мысли, а где столько рабочих мест взять. Ладно бы по 200 тел в год, но их ~1к, а еще вкатуны со стороны.
Это отсеивалка для омежек нерешительных. Никто не ожидает, что у тебя есть реальный год коммерческий разработки.
>требования
>опыт - не менее одного года
>да никто не ожидает что у тебя реальный опыт
Дружище, иди разу синиор архитектом, вдруг там тоже чего не ожидают
Я когда вкатывался рассылал резюме по всем джунским вакансиям. Часто его тупо не читали конечно но спустя недели 2 зашел на собес и затащил его
Наверное, всё же речь идёт об общем опыте работы, а не только в айти
Я так и делал в своё время. В конторах какие-то совсем неадекватные требования выставляли, я даже веб не знал, учил по тестовым заданиям. Но кодить умел, лет так 10 уже раз через раз.
Отправлял везде где мог, ходил на собесы.
В итоге через месяц нашел работу, где требовался джун с опытом, а я ни тем ни другим не был даже. В резюме писал весь опыт и всё что могу со всех предыдущих работ.
Так что да, не надо ссать и бояться пиздеть. Они почти всегда ищут решительных и умелых людей. Если это обьявление тебя отпугивает, значит они успешно отсеяли тебя.
Сборщики ещё и зависимостями управляют. Мне скорее это нужно, а не упаковка проекта в зип.
Если тебе нужно это, то используюй второй вариант (надо накатить), первый собирает вообще всё что есть.
Есть один основной цикл который раздаёт задания и запускает потоки. Но проблема в том, что если один поток будет работать слишком долго, остальные просто будут ждать его, а хотелось бы реализовать следующий сценарий.
Основной цикл получает набор заданий, запускает потоки и забывает о них. Получает новый набор заданий, запускает следующий и так далее. Т.е потоки живут своей жизнью независимо друг от друга
Я правильно понимаю что такое можно сделать только через процессы, а не треды? Можно ли сделать треды независимыми?
Чет нихуя непонятно чего тебе надо. Треды параллельны в том смысле, что если один чего-то внешнего ждёт, то другой в это время может работать. Если один ждёт слишком дольше чем остальные, можешь вместо пула руками их делать и досыпать новые задания не дожидаясь старых.
Если тебе нужно прямо чтобы оба потока одновременно процессор ебали, то это только через процессы.
Как
Вот например:
"Напишите функцию, которая находит число Фиббоначи по его номеру. В качестве аргумента подается целое положительное число n (число). "
Решение простое, но я даже его не могу выполнить.
А как вы начинали учиться? Быстро ли вкатились?
Я не вкатился.
>Есть один основной цикл который раздаёт задания и запускает потоки
Че?
>Но проблема в том, что если один поток будет работать слишком долго, остальные просто будут ждать его
Это не то как работают Thread-ы в питоне. Ты че-то путаешь
>Основной цикл получает набор заданий, запускает потоки и забывает о них. Получает новый набор заданий, запускает следующий и так далее. Т.е потоки живут своей жизнью независимо друг от друга
Гугли celery и не изобретай велисипеды
Берешь и решаешь другую задачу попроще.
Не трать время на то, что не получается решить меньше, чем за два дня (когда вообще прогресса в решении не чувствуешь).
Набивай опыт и понимание на других задачах, потом возвращайся к этим.
Попробуй изучить теорию алгоритмов, оттуда появятся идеи. Тот же известный курс: https://www.youtube.com/watch?v=KdZ4HF1SrFs&list=PLRDzFCPr95fK7tr47883DFUbm4GeOjjc0 (не обязательно все проходить, понимать и запоминать, если умеешь схватываешь общую идею и понимаешь как применить).
если хочешь обойти ограничения GIL, при этом реализовать свои workers, то изучай пакет multiprocessing
можно взять Celery, как предложили выше, если тебе это нужно не ради изучения методом велосипединга, а для решения реальной задачи
Там вот это самое важное.
Что после этой книги читать?
Год примерно
> Че?
Брокер-воркер
> Это не то как работают Thread-ы в питоне. Ты че-то путаешь
Threadpoolexecutor так и работает. Дошел до обычных thread и сделал что хотел
> Гугли celery и не изобретай велисипеды
Я уже месяца четыре задаю тут вопросы про celery, но кроме названия тут про него никто не знает. Вдоль и поперек обошёл его функционал и понял что он не делает то что мне нужно, потому сделал свой.
>Я уже месяца четыре задаю тут вопросы про celery, но кроме названия тут про него никто не знает. Вдоль и поперек обошёл его функционал и понял что он не делает то что мне нужно, потому сделал свой.
Базаришь? Сдается мне ты просто доки не читал как следует вот и все. Что тебе надо-то конкретно? Из той мешанины, что ты понаписал сложно суть уловить. В celery можно создать произвольное число воркеров и произвольное число очередей, можно привязать редис а можно реббит, можно выставлять определенный приоритет таску, можно использовать разный бекенд для хранения результата, можно паковать таски в чейны, можно запускать таски по cron-у а можно откладывать на произвольное число секунд. Ты уверен что он не решает твою задачу?
Забудь. Человек не понимает что такое тред, что такое пул тредов а что такое процесс. Но уже пишет какие-то там "свои решения" т.к. видите ли проверенный годами инструмент ему не подходит. Очередной вкатуся с интеллектом хлебушка, но очень высоким ЧСВ.
Я работал с celery. Это на проекте, а не задачках.
Сам проект - чаты и сообщения. Сообщения обрабатываются долго из-за ущербного апи, примерно 2-5с. Поэтому их надо пихать в очередь. Сообщений много, массовые рассылки.
Кажый чат - отдельная очередь, причем fifo, это важно. При этом желательно иметь защиту от спама одним и тем же сообщением на один чат. Так что эти очереди должны создаваться и обслуживаться на лету.
Под критерии подошел sqs. Внутри fifo есть группы fifo, т.е каждая группа обрабатывается параллельно, но внутри - по порядку. Вроде всё ок.
Но есть серьезные проблемы со скоростью. У celery есть два типа воркера - prefork(процессы) и gevent(треды). Первый между тасками имеет задержку в две секунды. Второй - 5 секунд. На простой таск который просто выводит сообщение в лог такая задержка.
Ладно, хорошо. Может получится с redis такое сделать? Он быстрее и те же самоые воркеры очень быстро получают таски. Я много всего обошел, доки, либы, но celery не умеет делать динамические очереди, вообще ни на одном брокере. Точнее умеет делать сами очереди, но не назначает их рабочим. А в самой связке celery-redis fifo отсутствует как явление, делать одиночного воркера на очередь это идиотизм, как говорил, таких очередей может быть тысячи, позтому нужен именно мультитрединг, который сам будет назначат один поток на одну очередь, если она есть.
Rabbit? У нас от него отказались, да и я прошёлся по нему и не нашел ничего похожего.
В команде питонистов нет. Девопса нет. Точнее есть, но он больше техлид и пхпшник, но такие задачи не делал.
Скажи как в celery с redis на лету делать fifo очереди и назначать их рабочим. Число очередей произвольное и непостоянное.
Забить хуй на celery и пилить свое. Только не говно а ту же систему с очередью, консьюмером и продюсером. Юзай Кафку, консьюмеры и продюсеры - питоновские процессы
То что каждый чат - отдельная очередь это понятно. Но нахрена по отдельному воркеру на каждую очередь?
Я сделал с redis примерно так.
send - отправляет дикт в указанную очередь и название метода которым надо его обработать, как это делается в celery. В redis они сделаны в виде списков для доступа через lpush и rpop.
Очереди которые обрабатываются в текущий момент помечаются ключом в redis, через redis lock конечно, так что гонок нет.
Основной тред запрашивает список всех свободных очередей и запускает каждому свой отдельный тред. Количество тредов ограничено и контролируется само собой.
Тред-обработчик помечает очередь в redis ключом что он обрабатывается, так что второй такой не запустится. Обрабатывает до тех пор пока очередь не кончится. Если сообщений нет - делает паузу между опросами в 1с. Если их нет достаточно долго - тред завершается и удаляется ключ. Каждыц тред имеет своё соединение из общего пула с redis.
Так же сделал gracefull shutdown. Ключи блокировок временные, так что они не зависнут.
Делал тесты. Запускал несколько воркеров на разных машинах. Загружал большой набор тасков. Дублей нет, гонок нет, потерянных сообщений нет.
Был вариант использовать встроенный queue, чтоб брать по несколько сообщений за раз, но в случае сбоя их придётся выгружать обратно, так что смысла в них не нашёл.
В итоге за пару дней - код на 150 строк. Очень быстрый. А я ебался с celery месяца четыре. Поставлю на тест в проект, грузить тасками и следить за утечками памяти, если они будут.
Чтоб был fifo. В случае с redis, если сделать воркера с concurrency, то они будут забирать таски вразнобой. В celery нет fifo, это должен обеспечивать брокер, например sqs так делает.
Это не моё решение, какое нашёл в интернетах. Там серьезно предлагают делать одиночного воркера на каждую очередь чтоб был fifo.
Настолько боишься что один таск выполнится раньше другого? Сколько по времени обычно занимает исполнение одного таска по отправке сообщения? И сколько таких сообщений обрабатывает ваша система за секунду?
почему ее нет в оппосте?
на самом деле лол в том, что они так отпугивают адекватных.
Потому что реально дисциплинированный и адекватный чел реально оценивает себя и ждет такого же от окружающих.
типа что написано - то и требуется.
а не какая то хуйня, которую написали для прикола.
Быдло/нибыдло - это ведь ты никак устроиться не можешь, а не я. Я тебе прямым текстом говорю о причинах, можешь биться в истерике сколько влезет, но ситуацию это не изменит.
Выполнение одного раньше другого нельзя, в пределах одного чата одновременно выполнять нельзя. По времени секунд 2-5, штук 6-10 запросов на апи с кучей проверок, которые никак не распараллелить и с ограничением на 6 запросов в секунду. За секунду сколько хз, сервера на хетзере, наверное много. А приходит обычно тоже много сразу. Делаю с запасом на большие нагрузки и дублированием на другой машине.
цифровой гулаг
944x648, 0:01
Анон, я тупой, и всё такое, но как просто написанный класс, без инициализации с присваиванием имени, при запуске кода в IDE запускает блять цикл который в него вложен??? Он же должен просто глянуть на класс и закрыть консоль???
class World:
cycle = int()
sec = int()
def __init__(self, name):
self.name = name
while cycle < 3000001:
cycle += 1
if cycle == 1500000:
cycle = 0
sec += 1
print(int(sec / 2))
Отступ поправь, у тебя сейчас цикл вне функции __init__.
То что он в теле самого класса выполняется это всрато, но видимо по той же логике, что и cycle = int(), который у тебя будет полем класса, одним общим на все объекты.
В питоне классы это такие же объекты как и всё остальное, class World - просто синтаксический сахар под конструкцию по выполнению которой в переменную World записывается объект, хранящий твои методы и прочую херь.
450x360, 0:02
смотри - я создаю мир со свойством течения времени, я думал должна быть переменная которая изменяется циклом while по ходу выполнения кода и относительно неё могут происходить всякие другие функции, типа if sec == 3: пукни два раза тремя жопами, поэтому написал в теле класса вот это вот всё, а если цикл внутри __init__ то что будет ща буду тестить, хуле
640x360, 1:42
> питон ругается на импорт, поправил
> теперь джанга ругается импорт, поправил
> снова питон ругается на импорт
аъаъаъаъаъа
>По времени секунд 2-5
Шо? Вы чего туда накрутили? Вы видосы склеиваете что ли? Или парсите жсоны по 80к строк?
>>48050
Тебе бы питон подучить, алгоритмы и структуры там покодить.
А то, что ты вроде как пытаешься натворить называется event loop или game loop. В движках уже запилено, нужно только разобраться как использовать.
Вот про паттерны можно читнуть
https://gameprogrammingpatterns.com/game-loop.html
Много запросов. Проверить одну хуйню, если нет сделать вторую, если есть третью, потом ещё запрос и ещё дальше. Я ж говорил, апи ущербное.
Ну, я учу, потому и ищу ответы на вопросы. А читая про всякие Arcade или Pygame или PyQt5 постоянно натыкаюсь на нытьё про "мало возможностей". Пройду по ссылке, конечно, спасибо.
Спасибо, взял на рутрекере
Это cpu-bound задача такая? Или столько времени на обращение к базе идет? Что профилировщик говорит? В любом случае это пиздец ненормально.
Это работа со сторонним апи.
В общем проект связывает разные crm и мессенджеры. Надо проверить наличие контакта, сделки, чата с ним внутри crm и прочие такие штуки. Можно конечно часть инфы хранить у себя в базе, но это такой себе вариант. Если был бы просто один запрос, то было бы отлично, но нет. Часть методов у них работает отвратно, а некоторых нет совсем. Сами разработчики у них ленивые жопы.
Ещё у них бывает такая штука, что сообщения отправленные в малый промежуток времени приходят на сервер не по порядку. Приходится их предварительно сортировать по timestamp, что опять же увеличивает время обработки.
>сообщения отправленные в малый промежуток времени приходят на сервер не по порядку. Приходится их предварительно сортировать по timestamp
Задам очевидный вопрос: хули этим не занимается фронт?
Доноси это до них, пусть приводят в порядок. Я бы принципиально такой хуйней заниматься не стал.
моя первая работка как раз была связана с чатами (Вебим), приход сообщений вразнобой - обычная тема, упорядочиванием должен заниматься фронт
Кабан может не ожидает, а херочка - вполне.
Можно. Но есть нюансы. Могут быть проблемы, если код был обфусцирован, кроме того надо обращать внимание на конкретную версию питона, который сгенерировал этот байткод.
Вот несколько инструментов для восстановления:
https://github.com/zrax/pycdc
https://github.com/rocky/python-decompile3
https://github.com/rocky/python-uncompyle6
Проблема в том, что при запросе бот выводит только 1 элемент. Почему так происходит? Сдается мне я обосрался в функции вызова. Код не весь, специально отсеял все лишнее
users выглядит как на пике, притом что при sql запросе на вывод всей таблице, бот выводит только id из нее, то есть единицу.
При всем при этом, если в фунции def conn() заменить return на print, то в ide выводится вся таблица в виде списка. Пик 2.
> Почему так происходит?
все потому что гоблин ебанный двуличный мракобес, с пресмыкающейся пассивкой дементием, а клим гадкий гомофоб и пидорас, ну а ты каложор, все просто.
По моему вопросу что подскажешь, если представишь, вместо таблицы с гоблином, таблицу штаба нэвэльного?
У меня есть хуита, которая принимает запросы и работает нормально. Но иногда в async-функции она выполняет код по 40-80 секунд (блокирующий) и в это время она ни на что не отвечает, обрабатывает все прилетающие за это время запросы потом разом. Я попробовал в отдельных поток запихнуть медленный код, но из другого потока await-функции не срабатывают выпадая со странными ошибками.
Я могу переписать вообще всё полностью без asyncio просто как обычное многопоточную программу (я много писал на с++ многопоточного) через свои способы синхронизации и треды, но мне кажется что в asyncio буквально две строчки кода должны быть, которые позволят в другом треде выполнять медленный код, а потом возвращаться в основной поток. Подскажите как нагуглить это, а (ещё лучше) что изучить, чтобы таких вопросов про асинхронщину не возникало больше.
Только сейчас увидел скрины выше, забавно что у кого-то то же треды и asyncio
> нэвэльного
популист, его штаб состоит из точно таких же воров и мразей
> что подскажешь
сменить ублюдонскую белую тему, это пол пути к успеху, потом можешь начинать гуглить
>>48910
> я много писал на с++ многопоточного
какой же ты мерзкий и жирный
> что изучить
изучи еще больше уебищных юзлес крестов, подрочи байты, авось снизойдет умение гуглить хотя бы оф доки додик
у меня от раньше выполнялся код почти минуту и все было заебись, а щас почти весь выполнился за секунду и меня послали нахуй ыыы
Так а зачем ты пукаешь, если ответа дать не можешь? Мама в детстве не долюбила и пытаешься хоть так заполучить частичку внимания?
чтобы поджечь тебе сраку и побудить к действию, но ты додик, девочка-внутри или жироеб, поэтому просто обмякаешь
тебе тяжело по жизни будет абсолютно везде и во всем..
И снова получишь тот же ответ
Даже хз, где это видано чтоб один и тот же код на разных машинах с разной скоростью работал, хмм
Делаешь threading.Thread даешь start, а потом где надо вызываешь join чтоб дождаться результата выполнения, если нужно. Если надо чтоб тред завершался вместе с основным потоком, даешь параметр daemon=True. Если хочешь запустить несколько потоков и сразу получить их результат, есть функция покороче, threadpool через with
> парсить xml на клятой змее без анальной боли
все знают что питоняшка топовый чойз для скраппинга, НО ЭТО НЕ ТАК БЛЯДЬ !
хмл формат говна хуже жсон параши, просто люто уебанский цырк с полями без параметров
такой кококо маленький и охуенный скрапер - полная хуйня! эта параша даже стабсов не имеет, просто блядь позорище
далее пайпитер - настолько паскудное уебище что автор забил хуй и ушел на жс говно, другие додики подняли репку, но делают точно такое же говно которое не работает с новым апи, и им похуй на тикеты
селениум - ЛЮТЕЙШЕЕ ПАСКУДСТВО С УЛЬТРАУЕБИЩНОЙ ДОКОЙ я проибал литералли 3 часа на хуйне с подключением профайла
плрваврайт - уебищное название, но топовая тулза от мелкософта, вторая топовая вещь после вскода, сука там охуенно просто все, все для людей блядь, есть темная тема, а не убожество как у нихуя не прекрасного супа. топовая дока ГДЕ БЛЯДЬ ОТДЕЛЬНОЙ СНОСКОЙ ОПИСАЛИ КЕЙС НА КОТОРЫЙ Я ВЪЕБАЛ ТРИ ЧАСА сукааааа, и это мелкософт, который кормит спермоглотов пиксельхантинг игрой из 95 года, каждый раз когда ты ресайзишь окощько
суп в итоге я даже не пробовал, я опять вижу ублюдскую доку которую можно не читать нахуй по причине её пидорастии
все во что мы так верили - оказалось обманом анончик, крепись и жри говно, таков путь.
>>48967
пчарм для даунов, ставь вскод.
В общем, я использую дрф, у меня есть на странице набор постов пользователей, к которым можно ставить лайки и дизлайки. И соответственно у кажного поста будет счетчик того и другого. У меня есть модель поста и модель реакции, которая состоит из поля, ссылающегося на автора лайка/дизлайка, поля, ссылающегося на пост, к которому поставлен лайк/дизлайк, и булева поля реакции, типа если тру, то значит лайк, если фолс, то дизлайк. Но ещё я решил добавить в модель поста числовое поле с количеством лайков и такое же поле с дизлайками. Просто я подумал, что наверное делать запросы, считающие все лайки и дизлайки для каждого поста в таблице реакций, каждый раз, когда кто-то просто заходит на страницу с постами, это типа слишком, и поэтому подумал, что буду просто делать такой запрос, когда кто-то ставит реакцию и записывать число в соответствующее поле в таблице поста. Таким образом, когда будет просто выводиться список постов, то считать лайки не надо будет, а когда их количество будет меняться, то тогда и буду считать и записывать результат в таблицу поста. Я правильно думаю?
Ну и вот. Если эта схема норм, то тогда вопрос, куда мне писать логику, которая будет считать все лайки/дизлайки, при создании нового лайка/дизлайка? То есть у меня будет наверное CreateAPIView, создающий запись в модели реакций. И я хочу, чтобы после создания записи, он ещё сделал запрос, считающий все лайки/дизлайки для поста и записывал их в соответствующее поле таблицы поста. Я просто как-то не могу понять, какие там методы в каком порядке вызываются, когда активируется CreateAPIView. В perform_create это сделать? Или вообще как-то иначе?
> дрф
хуита убогая, об этом пишут все джангодауны, не жри говно, а ставь фастапи с вью
сейчас память хуй купишь, а джангопарашное уебище оверфлудед говном ебаным юзлесовым, поэтому жрет раму как не в себя
забей хуй.
Ну я хочу когда-нибудь на работу устроиться и делаю этот проектик как бы для изучения и демонстрации в будущем. А вроде бы для дрф побольше вакансий типа. На фронте вью использую, да.
class User(model.Model):
__nickname = model.CharField(...)
class Message(model.Model):
__caption = model.CharField(...)
__user = model.ForeignKey(User, ...)
Мне нужно получить Json объекта Message в виде
{
__'caption' : 'value0'
__'user': {
____'nickname' : 'value1'
__}
}
Ну если это рест фреймворк, то тебе нужно в сериализаторе сообщения присвоить переменной user сериализатор юзера.
Типа:
class UserSerializer(serializers.ModelSerializer):
__class Meta:
____model = User
____fields = ['nickname', ...]
class MessageSerializer(serializers.ModelSerializer):
__user = UserSerializer()
__class Meta:
____model = Message
____fields = ['caption', 'user']
Но если тебе только один никнейм нужен и он у тебя выводится в __str__ методе модели User, то можно так, без отдельного сериализатора юзера:
class MessageSerializer(serializers.ModelSerializer):
__user = serializers.StringRelatedField()
__class Meta:
____model = Message
____fields = ['caption', 'user']
Ну, в общем, смысл понятен, спасибо. А насколько хуевая идея делать какой нибудь метод внутри самого объекта, который будет просто возвращать нужный dict?
Ну так рест фреймворк - это тоже джанго. Как раз и придумали чтоб жсоны из моделей делать и наоборот.
Если у тебя джанга то и используй джангу, а не хуярь велики
Если самопписное говно то делай метод to_dict в модели и он будет возвращать словарь
Все, разобрался, теперь все работает. Спасибо
>не хуярь велики
Я пока еще студентота, это привычка
>>49195
> Посоветуй не для даунов
а ты не очень умный если честно...
>а ты не очень умный если честно...
Так и есть, я так понял у тебя вижул бэйсик студио ммм, вот это то не для даунов?
> btw
иди нахуй
я вижу, поэтому и написал, хочешь работать в обоссаном офисе с армстроногом, вперед и с песней ебать убогую флудед жангу, томика луца не забудь перечитать, ага сука)
> да еще
душная пиздорылая лягушка иди нахуй. фастапи топчик, ноудискас.
Написал вот как-то так. Данные с датчика сохраняются в список, который и отправляю. Если сервер ответил "200", то список очищаю. Это будет работать? Не будет ли тут случая когда данные отправятся повторно, если например сработает таймаут, на самом деле отправив данные?
Если такая ошибка есть, то как это устранить? Проверять на стороне сервера?
Я не программист, если что не так.
1. Проверяй в бесконечном цикле который ждет через time.sleep, треды тут ни к чему
2. Добавь мониторинг, в случае ошибки логи должны быть
3. В принципе такой вариант валиден, но данные в теории могут всер авно продублироваться, чтобы это отловить отправляй timestamp внутри каждого показания счетчика
> Я не программист, если что не так.
дауна выше не слушай, бесконечный луп хуита, а реализуй логику експешона, пасс это тоже хуета, делай там стак и ебашь рекурсию (я так делал (только без стака))
>бесконечный луп хуита
Даун, у тебя асинхронный ивент луп работает на том же бесконечном цикле. И большинство скриптов-демонов работают точно так же блять.
В идеале ему конечно тоже стоит создать своего демона, который работал бы через supervisor например если на unix. Ну или на худой конец свое самописное решение через os.fork
ладно, я погорячился, просто тригернулся на в целом уебанский подход
тут должен быть вочер за сетью, с колбеком на случай разрыва
ос тоже хуета, либо паслиб либо что то другое, не знают просто бесит, всегда там говно какое то
>>49425
я истинный оп питонотреда https://sites.google.com/view/pypry/
а ты никчемный нюфаг - нука брысь нахуй шваль
Вот так в итоге оставлю, как-то работает, наверное сойдет. Только нужно еще что-то придумать со сбрасыванием часов при выключении питания. Оно конечно через NTP получает время, но не сразу.
Лог пишу в stderr, systemd может оттуда брать. На счет лога опасался что он все место забьет при возникновении ошибок, но прикинул и вроде бы нормально, нужно только проверить настройки logrotate.
>в целом уебанский подход
Может и так, я не претендую на звание программиста.
>тут должен быть вочер за сетью, с колбеком на случай разрыва
Но что оно улучшит? Поможет предотвратить какие-то нежелательные последствия сбоев? Но даже если все напрочь сломается, то systemd перезапустит.
Вот кстати про поднятие демона от Бизли (стр 524). Хуячит через fork и while True, но в общем если ты новичок в пистоне и юниксе, то можно так не заябываться
>Вот кстати про поднятие демона от Бизли (стр 524).
Это для старых инитов. Сомневаюсь что на это стоит оглядываться при использовании systemd.
>>49457
эксепшоны по красоте расписал, чотко!
BASED
мне нужно получить событие, в винде звук. Как зафиксировать, что на каком-то звуковом устройстве появился звук?
sounddevice
1280x720, 0:4512,2 Мб, mp4,
1720x720, 0:2911,4 Мб, mp4,
3440x1440, 0:096,3 Мб, mp4,
3440x1440, 0:15
> стоит
если совсем зеленый можешь начать с квиза на мобиле, забыл как приложуха называется, но найдешь изи, она в топе
>>49516
безмозглый даун только используя инструмент для решения своих задач можно не дропнуть через две недели.стоит
>>49541
> винде
никак. спермоглотам неположено. индусос закрытая помойка для унтерменшей, это не Операционная Система для Пользователя ( как Arch Linux ) в привычном понимании.
конечно такая неявная сортировка это пиздец и залет прям явный ууу
Хуй сосешь?
В общем, я тут ещё подумал, что надо ведь как-то отображать, что текущий пользователь уже лайкнул какой-то пост. Как это лучше сделать? Весь день ебался, пытаясь как-то добавить в сериализатор, выводящий список постов, ещё информацию о том, лайкнул его пользователь или нет. Но не смог в общем. Типа мне бы пришлось для каждого поста на странице делать запрос к бд и смотреть, нет ли там лайка от текущего юзера.
Я тут подумал. А может просто при логине делать запрос к бд и сохранять в localStorage какой-нибудь список всех оцененных постов? Норм идея? И дальше там добавлять/изменять эту информацию при новых лайках.
Не знаете, как такая штука везде реализуется?
> Норм идея?
Если ты от скуки маешься, то пойдешь, но вообще, конечно, хуита. На любой запрос сервак может отвалиться, значит клиенту нужно сперва ждать подтверждения двухсотки. А если юзер закроет таб до подтверждения? Делать полноценный двухфазный коммит? Ну это перебор немного для такой задачи. Забить на консистентность? Лучше уж базу дрочить на каждый запрос поста. Если индексы есть, то джойн быстро отработает, не страдай хуйней.
> Не знаете, как такая штука везде реализуется?
Б-дерево на диске по паре id поста и юзера в качестве ключа да https://en.wikipedia.org/wiki/Bloom_filter в RAM поверх него.
Ну не очень понял, в чем проблема. Я это планирую использовать для того чтобы фронт понимал, что ему при нажатии на кнопку надо не пост запрос на создание лайка послать, а делит на удаление лайка. Но даже если че-то там не загрузится, то я все равно в бд поставил констрейнт на то чтобы у одного юзера для одного поста могла быть только одна запись, поэтому ну типа не сработает энивей. Ошибку какую-нибудь покажу, что типа вы уже лайкали.
>>49816
Ну и я прост ещё недопер, как это сделать по-другому, лел. Вот у меня 100 постов на странице например. И че мне для всех загружать все лайки вообще каждый раз когда кто-то просто на страницу заходит? Ну это же точно не умно? Я придумал, что при лайке буду считать количество всех лайков для лайкнутого поста и записывать это прям в таблицу поста. То есть когда кто-то лайкает, создается запись в таблице лайков, происходит count запрос для количества лайков к этому посту, это количество записывается в таблицу поста в поле "лайки". Таким образом, когда кто-то просто заходит на страницу, считать лайки для поста не надо будет, а просто вывести число. Но вот тогда не понятно, кто эти лайки делал конечно. Поэтому я придумал ту штуку с запрашиванием всех лайков юзера. Ну энивей это же лучше, чем каждый раз все посты на странице проверять, да?
твои шизопростыни не читаю (потому что типовые задачи, но ты отчаенно ебешь голову и отказываешься гуглить сука)
лайк эмаунт грузится вместе с постом
при наведении догружаются лайкуны
хуле так сложно? жалко запросы сделай кеш блядь
На 521 кстати годная тема
Ну я понял что это конструктор, я имел ввиду та часть что в скобках, (dict), что это? Это наследование от словаря или что?
Это название параметра, но перед должен быть self. Стало быть, раз его нет, згачит он вместо self
putsocket, getsocket = socket.socketpair()
putsocket.send(b'xyz')
result = getsocket.recv(1)
print(result) # x
такова история программирования, сынок.
так выглядело api berkley sockets в языке BSD.
https://ru.wikipedia.org/wiki/Сокеты_Беркли
Зачем ты спрашиваешь "зачем?".
Ну что бы джсоны по апи дергать. За относительный путь я понял, спасибо
А если я использую 2 сокета внутри моего приложения, чтобы по ним обмениваться данными? Где там хедер? Это ж даже не протокол TCP/IP
Очевидно что можно было бы попытаться прочитать из сокета все что там есть через цикл а потом выйти из него, когда последовательность закончится. НО:
1. Когда в сокете ничего нет и мы вызываем recv, он падла блокируется и ждет появления байт (которые не придут), не возвращает никаких None
2. Это можно решить передавая в конце определенный символ который бы означал окончание последовательности и по нему выходить из цикла, но выглядит как-то по-уебански. Как заставить recv не блокироваться?
О, ну это вроде поможет, спс почитаю. Типа получается одним запросом посчитаю, сколько у каждого поста лайков. Ну или не одним, хз.
>>49862
Да в гугле чет все слишком сложно все это реализуют и по-разному, я нипанимаю. Я бы в принципе мог сделать чтоб оно работало, но вот мне кажется всё, что я неправильно делаю наверное. Хочется чтоб я сделал запрос типа GET /posts/ и хуяк он мне жсон со всей информацией которую надо отрендерить. Ну вроде вот аннотация то, что нужно. Но с лайками для юзера ещё подумать надо будет. Ну я уже сделал почти как я говорил с сохранением в сессию типа. Посмотрю/. как будет работать.
./n.join()
https://pastebin.com/MHhEQjZq ну или ваш вариант.
Если результат первой функции не используется где-то еще, а ее вызов не вылезает за пределы длины строки, то все делаю в агрументах
один императивный, второй декларативный, use wisely yopta
Если значение параметра больше нигде не используется, то сразу внутри, очевидно, не в ущерб читаемости конечно
А таком случае параметры записываю в новые строки, если их больше одного.
Какой петпроджект можно накатать на чистом петоне?
Микросервис может какой.
дахуф уже наскиллованный стал?
Антон, решил я наконец вкотится в погромирование.
Что скажешь про курсы от Яндекса?
https://practicum.yandex.ru/backend-developer/
В конце концов, это же в их интересах подготовить максимум качественных рабов за еду, которые задемпингуют профессию в говно. Обещают профессионалов - преподавателей, и актуальные знания в курсе. С 75% скидкой от госуслуг стоить будет копейки.
Кто-нибудь проходил?
> Карта глубины нихера не формируется нормально
потому что у тебя руки из сраки
графон ирл нихуя не робастный, ты должен все сделать правильно
ты блядь гуглил вообще?
Да, RMS по камерам на уровне 0.06 и ниже, а RMS от stereoCalibrate ниже 2 не опускал, еще и stereoRectify выдает хуевые матрицы
2х AXIS 3204
Разница есть, будет это камера через модуль для стереорежима или две сетевые?
использую SGBM с GUI. Покрасил в RGB и полная хуита выходит, часть дальних предметов покрашены красным
>В конце концов, это же в их интересах подготовить максимум качественных рабов за еду
На самом деле яндекс состоит из кучи разных подразделений со своими целями. Конкретно у практикума цель собрать больше всего бабла с вкатышей
но я пойду сам туда за дипломом о доп образовании
>Если bufsize будет слишком мал то я не вытащу все данные оттуда, как сделать так чтоб гарантированно вытащить из него все? Указать ебанутое огромное число?
Значение recv ограничивает сверху, это чтобы не не подавился тем объёмом данных, который пришёл. Особенно актуально для низкоуровневых ЯП, где надо память самому выделять.
При этом функция тебе может вернуть пакет не целый, я часть. Например если ты пошлёшь сразу 10 килобайт через полноценную сеть, то на выходе получишь блоки примерно 1500 байт, чуть меньше, типа 1492, не помню сколько.
Это потому что данные идут в TCP, разбиваются на IP пакеты, каждый из которых около полутора килобайт вместе с заголовком.
У тебя единственный вариант в том, чтобы накапливать данные в буфере, пока ты не соберёшь пакет целиком. А как определять, когда пакет собрался, это уже твоя работа, или ты сначала высылаешь размер пакета, а потом сами данные, или ждёшь специальный байт или комбинацию, которая показывает, что пакет собран.
>2. Это можно решить передавая в конце определенный символ который бы означал окончание последовательности и по нему выходить из цикла, но выглядит как-то по-уебански. Как заставить recv не блокироваться?
Лучше всего начать изучать асинхронное программирование.
Ебло, как асинхронка соотносится с низкоуровневым междусокетным взаимодействием?
Так, что это самое основное предназначение асинхронки и работать с сетью удобнее всего именно через неё.
Смотри на асинкио-протоколы и loop.create_connection / create_server
Я в курсе про asyncio. Я юзал легковесное соединение по паре сокетов для оперативной передачи данных внутри самого приложения, хз насколько целесообразно юзать create_server для этого. Кстати сокеты можно обвязать асинхронкой но это делается костылями через Future:
https://stackoverflow.com/questions/48248567/how-to-await-a-select-select-call-in-python-asyncio
Я сильно сомневаюсь, что основной целью яндекса было делать на этом деньги. В конце концов, тот же курс на питоне прошло только 800 человек. Едва ли это огромные по меркам яндекса бабки.
А вот эффект от демпинга на рынке для них будет просто заебись.
Я сам работал на втором питоне с сокетами и селектами, но это извращение.
Если прямо хочется обычный сокет и не хочется асинхронки, мало ли почему, то сокеты поддерживают работу без блокировки-таймауты. Не помню, использовал ли когда-нибудь, я уже сто лет только через asyncio в питоне с сетью работаю и не понимаю, почему не работать.
С обычными сокетами больше магии, все эти bind/accept и не помню уж чего там ещё. Всё равно придётся асинкио изучать, если в сети хочешь лезть.
Я сомневаюсь, что вот из этих 800 человек хотя бы половина на что-то реально способна на выходе. А и без курсов масса тех, кто программирование осваивает, самостоятельно, намного больше. Особенно студни всякой.
Я думаю, они просто осваивают рынок онлайн-образования, за котором большое будущее. Есть питон курсы, есть курсы по другим языкам и технологиям, есть не по программированию вообще.
Сейчас небольшой рынок, потом будет огромный. Это одно из самых перспективных направлений.
Я бы тут в целом больше доверял яндексу, чем другим. Всё-таки они рынок нарабатывают, а не за копейками охотятся, как многие мелкие шарашки.
>А вот эффект от демпинга на рынке для них будет просто заебись.
Кстати яндексам меньше всего нужен демпинг на рынке. Они в силу масштабов намного легче могут платить, чем другие.
Демпинг как раз для них опасен, потому что выше риски появления конкурентов, которые при высоких зарплатах не тянут инвестиции.
>Я юзал легковесное соединение по паре сокетов для оперативной передачи данных внутри самого приложения, хз насколько целесообразно юзать create_server для этого
Вот это совсем не понятно. А зачем так сложно? Если внутри процесса одного? Не проще ли тупо через обычные очереди, queue?
> stereoRectify выдает хуевые матрицы
и хуле ты хочешь?
> Разница
в душе не ибу, но логика должна подсказать тебе что при грамотном сетапе ты ботлнекнешься об уебищную матрицу
у меня с опенсв до сих пор срачло подгорает, если работать с анивен датой, то это ебанная свистопляска, в итоге только нейросеть смогла выдать результат без ебли и составлении охуевшей индусской карты с параметрами на любой чих
> SGBM с GUI
как тут? если да то все правильно делаешь, я эту блядовину чейнил, в итоге у меня четыре окна с ползунами было лол и в каждом чето подкручивал, но это пиздец дрочь и бойлер плейт меня тресло как суку, я сначала на жсговне это сделал, но там очевидно самая мякотка нихуя не работает
советую поставить репку с гитхаба, там бывают годные обновки, я там нашел алгоритм который добавил китаец, так что буквально через три месяца он меня дичайше выручил
кароче поставь пару лампочек, освети сцену - если не поможет забей хуй, ты явно не вывозишь гуглежку и чтение СО.
>>50206
лол, ебать дебил
>>50213
> Future
тогда и в жсговне промисы это костыль, идиот ебанный...
накидай фоточек то
а вообще лучше не иби голову, один хуй хуйня получится юзабельная только на каком нибудь залитом светом светом конвейере
>А вот эффект от демпинга на рынке для них будет просто заебись.
Для этого у них ШАД есть, где средний чел хуй пройдет вступительнные без мат подготовки, а в практиктикум любого человека с улицы возьмут и протащат
Скачивать файл в виде обьекта идея не очень. Лучше сделай генератор по файлу и пользуйся им, если он лежит локально, ну либо как-нибудь ещё.
Делпй через try except и там делай что хочешь, ошибку надо обрабатывать, а не показывать. Ну, показывать в консоли надо, но главное сделать, что-то, например, выкинуть None или что там у тебя по сценарию надо
Это я к чему, представь что у тебя файл весом в охрениллион. Ты ж не будешь его в оперативку грузить, правильно?
Мне кажется он другое имел в виду, что не в виде данных файл отдаётся, а в виде хендлера с открытым файлом. Хотя хз что он имел в виду.
Тут сложно идеальное решение предложить, если ты файл сразу сохраняешь, то надо сразу как-то придумывать, куда его в файловой системе сохранить, какое имя дать, может вообще его не нужно сохранять и т.п.
Особенно с учётом исключительных ситуаций, когда например ты начал скачивать файл, а он до конца не скачался. А ты его уже начал записывать. И что делать? Надо как-то мониторить и удалять такие файлы, и т.п.
Без внятного ТЗ я бы не рискнул варианты предлагать вообще.
Пездос, всю ночь не спал, таки смог впердолить всё это в один запрос.
крассава
а теперь переделывай ;)
ну или хуй забей если даты не много
какая же джанга уебищная пиздец просто, кстати вся функциональщина типа map filter и тд и тп медленнее [лист компов]
>В конце концов, это же в их интересах подготовить максимум качественных рабов за еду, которые задемпингуют профессию в говно.
Для этого есть студенты.
Это уже зависит от бизнес-логики. Ифы с возвратом None "проще", но при разрастании кодовой базы эти условные возвраты засирают логику, особенно у чистых функций.
Тут тебе надо подумать, какие ошибки ты можешь обработать в контексте этой функции и обрабатывать только их в том случае, если можешь вернуть результат без изменения сигнатуры функции. А всё остальное должно прокидываться дальше.
ебать хули так дорого? я сам блядь решу лучше чем столько платить, я столько не зарабатываю
Да нужно чтобы поток сам стучался в главный поток, а не чтобы из главного join вызывался.
Вот примерно такой же код с таким же выводом, только существенно чтобы функция prn была async и вызывалась в главном потоке после сообщения от threading.Thread
Впрочем, можно уже забить, я сделал все без asyncio.
Бизнес-логика - в первую очередь формальное описание алгоритма, а не то, что тебе кабанчик там намямлил на полудневном грумминге. Вот формальное описание и описывает, должны ли ошибки ронять рантайм или втихую глушиться.
Гуглежку вывожу, ебаный OpenCV-Python выдает хуиту, ошибешься с параметрами и получишь месиво.
Так смысл не нейронкой делать. Надо понять можно ли без OAK-D обойтись или RealSense, потому что уже хер купишь.
В принципе есть платы StereoPi, но CM4 только едет из Китая
Матрица камер 1МП, но они же еще с автоподстройко что меня и смущает, так как все примеры на дешевых вебкамерах или же pinhole.
Короче карта как бы есть, но видно, что нет наложения по оси X, тут и гугол не поможет если я проебался. Буду дальше читать доки OpenCV, спасибо
> Гуглежку вывожу
не обманывай
> ошибешься с параметрами и получишь месиво
как и везде и всегда
> хер купишь
я тебе картинку с алика приложил
> 1МП
это разрешение не зли меня тупостью
давай удачи, в следующий раз приходи с картинками, у нас ведь компьютерное зрение а не хуй собаки, ю ноу?
>>50601
> async от threading
вопрос некорректный
Ну к примеру, можно написать async функцию и вызывать через await, а можно создать thread и использовать обычную функцию. В чём разница между ними кроме специфичного синтаксиса для первого?
> вызывать через await
ты можешь только корутину, а не блокинг хуйню (ну по факту тебе никто не запрещает, но смысла и пользы ноль)
твой вопрос ГУГЛУ должен был быть - в чем отличие мультитрединга от мультипроцессинга, потому как асинк авейт просто сахар
Я понимаю в чём отличие между ними. Просто я хочу понять, зачем существует async await, если через threading сделать гораздо проще.
Блять, ты понимаешь вообще что такое "блокирующий"/"неблокирующий"? Ты же понимаешь бля что cpu-bound задачи не выполняются быстрее, если ты их в манятред засунешь?
просек фишку, мы на коливинге такое обсуждали
ты не разбираешься в вопросе, но уже зачем то лезешь спорить, ты ебливый дрочер без задач. не пиши мне больше.
>>50654
если видишь как кто то эксплиситли указывает количество воркеров ThreadPoolExecutor(max_workers=5) то значит перед тобой пиздорылый даун
тоже самое можно сказать про мануальное открытие лупа - додики жрут протухшее говно
Разницы между методами loop и asyncio.to_thread - никакой
хотя нет, есть, с последним можно повыебываться и набить себе цену, якобы ты ниибацо в тренде
Ты - сын спидозной шалавы. Я задал вопрос в чём их отличие. Не можешь ответить по существу - завали ебальник
Ну чот хуита снова
https://imgur.com/a/q4Lo26y - фото
https://pastebin.com/FCzcf1eZ - код
Вот что мой код высрал
Калибровка стерео режима
0.4987280024608082 левая
0.453676328043347 правая
RMS 1.6204857856812112 калибровка стерео
Еще снова получаю заваленный горизонт почему-то. Если взять флаг USE_INTRISIC_GUESS, то remap приближает изображение, а нужно сохранить пропорции. Беру FIX_INTRISIC, получае только изменение горизонта.
Если будет время глянь пожалуйста, вдруг с чем-то уже таким возился.
SGBM уже сглаживание делает. Фишка в том что не выходит нормальной цветовой дифференциации.
У меня все равно бэкграунд светлее предметов впереди или посередине. В итоге окрашенная карта это просто световое пятно
- не используй русские менты
- не используй os
- не используй такую охуевшую экстракцию
упрости сцену и код до максимума, тупо белый фон и одна книга, потом добавь вторую и все это с хорошим мягким освещением
если ты с этим не справишься то гг.
какие впизду специальные камеры... в специальных камерах кроме зашитого "межзрачкового" расстояния и калибровки с завода ничего быть не может. изображение с камеры - тупой стрим кадров
причем там цвет блядь!? ты офф доки открывал? там пример ЧБ блядь!
а сама дебс мапа это фича экстракшен (тоже самое для стабилизации юзается) и матёшка с расстояниями между камер и до фич - ВСЁ блядь ну просто элементарная хуета
ближайшее с чем я сталкивался это crop visible и ротейт в горизонт по найденной доминанте
ну и фича матчинг и вообще все алгосы по фичам, но под мои дела они не подошли, поэтому не пушил далеко
> менты
каменты
> калибровки
прошивки с параметрами
Почему ЧБ, если 16 бит grayscale?
>камерах кроме зашитого
Именно, а эти AXIS по кило каждая, я еле их выставил хоть как-то. Еще и поворотный механизм для объектива. Там все в движении считай и это мешает выставить по Y нормально, так как для disparity map хорошие условия это сдвиг только по X иначе будет то что у меня выходит, это я еще с линейкой выставлял.
> 16 бит grayscale
нахуй ты душнишь ебать?
если речь идет за чистое чб, то оно называется БАЙНАРИ и даже плотается в специальной цветовой гамме
> мешает выставить по Y нормально
только твоя лень и тупость, недающая скачать уровень, сука тебе даже в строительный магазин для этого не надо идти, ууууу зумеры пиздец..
Хотя нет, это же key2
> блед импорты забыл отсортировать..
Использую mongoengine, хотелось бы что-нибудь проще и современней
В добавление. Знания у меня прям базовые. Сейчас в работе испольщую пайтон для запросов rest api с последующим парсингом(json/re) и выводом данных или последующий прогон через другие реквесты
Шитпостер
бан
в чем я не прав?
Если так удобно - делай
Лучше на Степике начни. 2 курса на Степике по синтаксису покрывают первую ступень Яндекс практикума. И скорее всего покрывают материал более подробно.
Едиственное стоящее, это паттерны проектирования, дизайн проекта, как устроена логика работы, ормки, валидаторы, их сочетание, варианты реализации тех или иных механизмов приложений и пр, на реальных примерах, а не обзорных. Вот этого не хватает в гугле. Это есть на курсах?
у меня знаний 0, я хочу плавно вкатиться подкрепляя сверху самообразованием, если пойму что курс уже ничего не дает то просто ливну
Не понимаю тех кто везде асинки суёт
Чел, на работу устраиваются реакто-дебилы, которые не знают даже примерно откуда и как странички в браузер загружаются.
> надо знать базу
нет
переменная - это такая коробочка.. -- и поебашил, смотришь на выдачу и ебашишь дальше - ВСЁ СУКА
> паттерны проектирования, дизайн проекта, как устроена логика работы, ормки, валидаторы, их сочетание,
тикетной крысе не понадобятся до конца жизни
>>51242 (Del)
лягушка глупая я уже весь тред картинками засрал что мне даже немного неловко
>>51244
> плавно
додь ты плавно видосы на ютубе не можешь включить или чо ебать?
>>51245
> везде
не надо, а там где надо идет буст х15
Тикетная макака как раз "переменная коробочка и ебашишь дальше" которая всегда делает говнокод, а к пониманию приходит только с опытом, но стоит ему начать писать что-то новое - будет говнокод. Потому что он не понимает как это всё работает. База в моём понимании это не зубрежка типовых алгоритмов, а умение их самому создавать.
манямир
А че бы и нет? По сути все операции I/O, если нужны просчеты, ну тогда да отдельно Process. Ебучий питон же не умеет в нативную многоядерность.
>Тикетная макака как раз "переменная коробочка и ебашишь дальше"
Для 99.9% процентов задач этого достаточно, что-то больше нужно только если ты пердолишь кишочки как инстаграм делал
> Смысл
в том что дока для пидоров, никто эту простыню унылую не читает и хуй в ней разберешься энивей
берешь блядь сорцы, берешь вскод с нейросетевым пайлансом и ебашишь нахуй по красоте.говно
дано:
- from fastapi_utils.tasks import repeat_every
- 03:00 АМ
задача:
сделать из репитера - шедулер
__________________________________________
тулза понимает только секунды @repeat_every(seconds=60 * 60)
а нужно производить запуск в конкретное время, внезависимости от времени деплоя и старта сервера
посмотрим решат ли книжные черви без задач задачу быстрее чем я успею примерно сообразить решение и спиздить код с СО после чая с печеньками :Р
> стдлиба онли бзв
чел ну я же просил без мокрописек
хотя я уже почти готов сдаца сук пздц тварь нихочет мразота((
БАЗА бы памагла антош?)))))
>задача: сделать из репитера - шедулер
Сможем объяснить - нахуя?
Для шедулера используй простой cron, если хочешь извратиться - celery, если нехуй делать - сам напиши его через create_task и asyncio.sleep
Модуль не на костылях это не мокрописька, тем более ты сможешь мониторить нормально, а то сделаешь потом без возможности расширения и пиздец приехали.
Тем более там нативно aio сделали https://apscheduler.readthedocs.io/en/3.x/modules/schedulers/asyncio.html#apscheduler.schedulers.asyncio.AsyncIOScheduler
Тем более ты хочешь вне eventloop это делать.
> create_task и asyncio.sleep
блядь вот ты низушник сука для тебя уже нон блокинг утилиту сделали без ебли, просто сука посчитай таймдельту и все нахуй
или надо еще пару учебников перечитать ?
> нахуя
питоняшный принцип минимальной достаточности
ну или ладно.. я просто подумал что крон перезапускает целый модуль, а там такой же няшный декоратор -_-
но дату посчитать один хуй все же придется из принципа челенджовости ~_~
>для тебя уже нон блокинг утилиту сделали без ебли
Мелкобуква, общаться научись для начала. Ты прекрасно видел целиком мой пост и все варианты что я предложил, тем не менее решил высрать максимально невалидную хуйню.
you will never know
>>51358
> джангодебилы совсем обезумели
always has been
>>51362
я бы тебя уволил за проф не пригодность
вместо работы с коробочными инструментами ты мне предлагаешь в зависимость укладывать какое то неведомое здоровенное говнище, которое будет крашится, которое надо сапортить и следить за версиями, хуе мое совместимости, а пакетный менеджер в питоняшке едва ли такой же пидорский как у жспараши
так что давай пока ниасилятор..
Спасибо, поизучаю. Я только рест сейчас использую, но там вроде они на основе обычных вью сделаны, как я понимаю.
>я бы тебя
На очко бы ты сел бля. После того как мы с ПМом тебя бы на пару обоссали за отсутствие софт скиллов и токс.
Не знаю, я разок использовал Jinja2 и Cheetah, а потом пошел учить VueJS, потому что это пиздец на Python фуллстак говнокодить.
Либо перекатывайся на JS либо дальше REST API не лезь, теперь всем занимается браузер и тут нужен нормальный фреймворк JS
> ПМ
видит как ты пытаешься скрыть свое незнание стандартных БАЗОвых модулей за васянскими поделками
которые приведут к необходимости увеличивать память и время на поддержку
а значит своим непрофессионализмом ты привел компанию к УБЫТКАМИ - а это UNACCEPTABLE !!!!
завтра последний день, собирайся.
ниасилятор. если бы не уебищные блюпринты фласка была бы идеалом
ну и еще лайв сервер у нее уебищный)) либо он просто препроцессоры не вывозит лол
Сдается мне, что какой-то уебан неправильно скопировал аргументы, и там (from, to, divisibleby, suffix1, suffix2).
Тогда пример: числа от 1 до 20, делящиеся на 4 и при этом не равные 12 и 16.
Собственно из произведений четвёрки это и будут 4,8,20,
Ну и за O(1) тоже надо бы хуем по еблу постучать, там в любом случае будет зависимость от размера диапазона и делителя, которые определят размер выходного списка.
Один шаг решета эратосфена заебашь и будет тебе счастье.
но ебливые додики дауны которым надо поебать голову, и применить хоть куда то свои даунские бесполезные книжки которые уже совсем скоро забудутся, вместо реальной работы все еще могут подумоть почему офсет_с округляет секунды
и чтобы его задефайнить нужно городить охуевшую конструкцию из колбеков
НО ВЕДЬ Я НЕ ЗНАЮ КАК ОНО РАБОТАЕТ ПАД КАПОТАМ
поэтому не буду лезть в залупу и просто наговнякаю кроном ыыы
>>51480
> из треда тупых вопросов
мы никуда и не уходили :О
>>51496 (Del)
что, восхищаешься питоняшеством, да лигушка :?
Ну так а я что что-то про шаблоны говорил? Я имел в виду вьюхи рест фреймворка, это типа контроллеры в джанге так называются.
спасибо!
Да хз, яб сам не отказался. Ну так, я вот делаю сайтик, гуглю что конкретно хочу, документацию читаю. Ну а так начинал делать по видосу от freecodecamp Django REST + Vue, как-то так, думаю нагуглишь.
Скриптовые языки уже начинают немного подбешивать.
А придётся. Ты редко когда будешь писать проекты с нуля. В основном будут просить либо придерживаться какого-то определённого стиля, либо дорабатывать существующий проект. Тебе дадут развивать имеющийся проект, будешь его переписывать?
Хотя, сейчас в эпоху микросервисов может и дадут возможность что-то сначала делать, но эти паттерны были придуманы не просто так по желанию левой пятки. Ты каждые пару месяцев захочешь переписывать проект. Так что в любом случае, понимание и поддержка чужого говнокода это часть процесса.
видимо, я косноязычно выразился.
Я понимаю чужой код, понимаю теорию: проходил структуры данных, системный анализ, паттерны (но в них, кстати, довольно много пробелов). Знаю про БД, нормализацию, отношения и так далее.
Знаю базово и джаву, и c#, и js (спиздить чужой код - переделать под себя).
Но я вижу, что у меня нет никаких навыков разработки. Я не могу сесть и написать программу, которую захочу. То есть я не могу понять, с чего нужно начать.
Поэтому мне всегда кажется, что нужно восполнить какие-то пробелы, что где-то есть какая-то "таблетка для буста в программировании" в виде книги, лекций или программы обучения.
Поэтому я вновь и вновь начинаю изучать всякие метаниты, learnjavascript'ы и так далее, но никогда дальше объявления класса у меня не заходит.
Делай проекты. Интеграции с какими-нибудь апи. Например, транслировать чат из телеги в дискорд и наоборот
додик завидует топовому теку или чево я не понял?)))
> Наверное и стол не из опилок
очевидно, я же не калоед)
> дуба
обычного, расеянского, класса экстра ;)
ну вот. я даже не знаю, с чего приступать в таком случае. прочитать документацию аиограм?
Конечно. Понять как работает эта штука. Делать, естественно с каким-нибудь git, можно github. Можно через бота делать для начала чтоб попроще было, а не через mtproto. Юзеров конектить, очереди может кое-где прикрутить, хотя можно и без. Базу по необходимости, может и редис куда пристроить найдётся. Упаковать в докер без композа(он и в проде нахер ненужен честно говоря) и задеплоить, если есть убунту. Вывести логи в графану можно через локи ну и пересборка по комиту через дженкинс, но это уже всё по желанию.
Вариантов и объём реализаций куча. На начальном этапе можно обойтись и скриптом без вебфреймворка, если сделать через aiohttp и кучей воркеров, просто чтоб понимать процесс и тонкости.
И да, начинать не с доков по либам, а с доков по апи. Куда что прикрутить, как читать и чем пересылать.
Фронт тут необязателен. Лучше не делай фронт на питоне, он убогий
Вы видите копию треда, сохраненную 4 августа 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.