Анон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы: https://ideone.com/ - возможность постить листинги кода и онлайн-запуска, не требует регистрации https://dumpz.org/ - можно постить листинги, не требует регистрации https://pastebin.com/ - для листингов, регистрация не обязательна https://www.codepile.net/ - можно расшарить код в том числе на редактирование, особая полезная опция - чат при каждом листинге, где можно код обсудить https://pyfiddle.io/ - запуск python кода онлайн, но чтобы шарить, надо регистрироваться
Вопросы-ответы: — А стоит ли читать Лутца, том номер N? Мнения в треде разделены. Кто-то за (очень неплохая база даётся), кто-то против (слишком много воды и объём книг убивает всё рвение). В общем — решать тебе, книга вредна не будет, но ты можешь её просто не дочитать и забросить.
— Стоит ли читать %книга_нейм%, если там питон версии 2.х? Нет, не стоит. 100% есть более актуальная книга, для пистона 3.х
— А что ещё можно читать? Питон сам по себе очень хорошо задокументирован и для уровня начинающих, и для продвинутого. Смотри официальную документацию. Можно начать вот с этого https://docs.python.org/3/tutorial/introduction.html
— Что можно почитать/посмотреть по многопоточности/параллелизации в питоне, да и вообще в целом? Очень годный ролик на американском языке про многопоточность и асинхронность https://www.youtube.com/watch?v=MCs5OvhV9S4
— А как учить джангу? Нахожу только книги по джанге 1.х У джанги отличные доки (одни из лучших для пистоновских либ, имхо), почитай их для начала. Книгу по джанге можно читать и для версий <2, это не проблема, т.к. принципы остаются теми же. Для переката на 2.х хватит changelog`a или тех же самых доков/статей. Начни изучать с разбора учебного приложения с голосовалкой из официальной документации.
— В ньюфаг-треде написано, что нужно начинать с SICP, чтобы научиться программировать Вот, пожалуйста, та же самая программа, но переработанная под язык Python: http://composingprograms.com/ (нужно знать ангельский или уметь пользоваться переводчиком)
— Как можно без лишней возни ускорить программу на питоне 1) проверь сначала свой код, алгоритмы и структуры данных. Чаще проблема здесь. 2) код можно иногда феерично ускорить, используя JIT (Just-in-Time) компиляцию. Почитай обязательно про модуль numba, он ставится через pip, и альтернативный интерпретатор PyPy.
— Дайте нормальные книжки на русском! Мы, блядь, не в пиндосии живём Брат, смотри книжки по ссылкам в шапке, там есть и русские. Но помни, без языка ангелов твоя жизнь проходит мимо и ты обречён быть на обочине знаний и технологий.
ps: анон, если ты вносишь изменения в шапку, оставляй ссылку на код с обновлённым исходником. Исходник: https://dumpz.org/bASGKD8cCFDf
>>2337202 → Свинособака, я тебе и по-человечьи и по-свинячьи и по-собачьи пытался объяснять - ты же слишком туп чтобы понять хоть что-то
Тебе максимально наглядно была продемонстрирована работа неблокирующего асинхронного кода, loop.run_until_complete добавлен исключительно чтобы скрипт ждал и не завершался раньше времени. То что ты не понимаешь концепцию асинхронки и ивент лупа а заодно и очевидно никогда не работал с питоновским asyncio ни на одном проекте - исключительно твои проблемы. Так и сиди дальше на джанге и не лезь к нормальным людям
>>2338459 >Тебе максимально наглядно была продемонстрирована работа неблокирующего асинхронного кода, 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])
А вообще так. Есть принцип Concurrency работы. Это когда надо одновременно исполнять несколько ветвей исполнения.
В каждой ветви исполнения код выполняется строчка за строчкой и только так.
В случае системных потоков, threading, система-интерпретатор переключают ветви исполнения в произвольный момент времени. Но при этом каждая внутри себя исполняется последовательно.
В случае asyncio, переключение ветвей исполнения идёт только на операторе await, пока нет await, переключение невозможно. А оператор await означает лишь то, что необходимо в этой строчке дождаться результата асинхронной операции, при этом можно переключиться на другую задачу.
задача, Task - самый главный примитив asyncio. Аналог треда в многопотоке. Все задачи независимые, каждая живёт своей жизнью, задача планировщика переключать задачи между собой. Это происходит на операторе await, как я уже говорил.
Вызов a = asyncio.create_task(say('Alice')) это синхронная операция. Смысл её в том, чтобы поместить в планировщик новую задачу, после чего она начинает жить своей жизнью, как и все другие задачи. Чтобы с ней коммуницировать, надо явно использовать какие-то функции. Сам объект-задача возвращается из функции.
Сделав несколько последовательный вызовов, мы получаем несколько задач. Они смогут исполняться, как только планировщик встретит первый await, и не раньше этого.
А когда мы делаем await asyncio.wait([a,b]) мы уже ждём, пока все задачи не завершатся. Это поведение по-умолчанию, настраивается, в доках всё есть.
Господа асинхронисты. Раз разговор зашел, подскажите, как мнне, примеру, запустить 1000 GET запросов асинхронно, дождаться их выполнения и получить результат в виде списков?
>>2338547 Если полностью самому пилить, несколько архитектур, идея общая.
1) реализуешь функцию-воркер. Точнее это сервис в виде, как описано ниже. Смысл в том, что этот воркер слушает очередь, получает из неё ссылку, которую надо скачать, возможно ещё какие-то данные, скажем номер ссылки.
этот воркер скачивает данные, и помещает его в другую очередь, точнее помещает туда какой-то тупл вида (ссылка, код возврата, контент, что-то ещё может быть)
после этого дальше случает очередь.
2) создаёшь две очереди, для ссылок и для результата. Запускаешь десяток задач-воркеров. Пихаешь в очередь всю тысячу ссылок, а результаты сохраняешь куда надо.
Так ты получаешь асинхронность, и при этом регулируешь нагрузку.
При этом очередь можно кормить постоянно, добавлять новые ссылки на скачивание в рантайме.
Можно иначе эту же идею реализовывать. Через семафоры, например.
>>2338563 Без модификации для 1000 запросов плохая идея. Но можно добавить семафор, расшаренный между тасками, и выставить лимит условно в 10 для семафора.
Если список на момент запуска известен и он умеренно большой, скажем 10 тысяч ссылок-задач, но так проще всего.
Если мега-список, или он динамически дополняется, то как я описал надо >>2338565
>>2338629 Это работа планировщика. Там разные типы задач, задачи, которые срабатывают по таймеру, задачи, когда ждали данных по сокетам, при системном вызове epoll, обычные задачи.
Если у тебя обычные задачи, то тупо по очереди. Задача отработала до следующего await, после него планировщик помещает её в конец очереди из других задач.
Надо исходники смотреть, я смотрел, но уже не помню.
>>2338631 Да, правильно. Пока не сделаешь await футуры-задачи, будешь висеть на текущей задаче.
Причём если ты сделаешь time.sleep(10) вместо await asyncio.sleep(10) то всё будет висеть тупо 10 секунд, ничего в это время происходить не будет, никакие другие задачи обслуживаться не будут.
>>2338631 >то никакой выгоды мы не получим? И тут ещё. Конкурентность часто не про выгоду.
Все эти треды придумали ещё в прошлом веке, для обычных компьютеров, которые были одноядерные. Более-менее массовые двуядерные процессоры стали появляться где-то с середины нулевых.
Тебе очень часто надо обрабатывать несколько задач одновременно. Например у тебя графический интерфейс программы, которая сетевое соединение устанавливает. Без конкурентности ты не сделаешь такую программу мало-мальски адекватно. ГУИ не должен блокировать сеть и наоборот.
Или когда надо несколько сетевых соединений обрабатывать. Тоже самое. Ты просто не сможешь это реализовать в обычной однопоточной логике.
Но правда то, что в asyncio тебе надо явно разрешать переключить задачу, и если ты этого не сделаешь, всё повиснет. Или если будет синхронную функцию использовать. А с тредами всё будет работать.
Кстати работа файловой системы нативно асинком не поддерживается. Тебе надо в тредах обращение к файлам запускать, чтобы выгода была, чтобы не подвисало исполнение на ожидании данных.
Сап, пишу бота для телеги, возникает вопрос на такого рода конструкции в примере кода: "@bot.message_handler(commands=['start', 'help'])". 'bot' - это объект класса. Эта хуякак стоит перед функцией. Как это вообще называется и что делает, нахуя там @?
>>2338459 > Тебе максимально наглядно была продемонстрирована работа неблокирующего асинхронного кода Не взрыв, а хлопок. Не наводнение, а подтопление. Не война, а спецоперация по демилитаризации и денацификации. Не говнокод, а максимально наглядная демонстрация. Так и запишем > 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 Ты кому пиздишь? Себе, мне или господу богу? > Так и сиди дальше на джанге и не лезь к нормальным людям Ну ты хоть разок открой документацию-то, долбаеб >>2338515 Зачем ты пытаешься что-то объяснить челу, который использует деприкейтед хуйню? Он же изучал погромирование по слитым курсам скиллбокса в телеге >>2338629 С помощью epoll, по факту просто проверяет события для файла >>2338534 Все так, только стоит еще рассказать про переключение контекста и генераторы >>2338717 Попробуй сначала изучить базовый синтаксис, вот серьезно. Какого хуя вы все так рветесь написать своего первого бота? Все равно придется возвращаться и изучать циклы с условиями
>>2338673 >>2338681 Но в чём же тогда выгода асинхронности по сравнению с тредами? Если в асинхронности нужно каждый пук делать асинхронно, чтобы всё не подвисло, а тредами проц сам управляет - получается, что треды дают более высокий уровень абстракции и проще для написания кода? Или тут кроются подводные камни?
>>2338755 Наибольшую отдачу асинкио даёт на сетевых задачах, потому что там в поднагодной используется специальный системный вызов, который делает коллбэк, как на сокет, где ты данные ожидаешь, что-то приходит. Это эффективнее, причём на других платформах тоже подобный подход используется. Скажем nginx так работает, и не только.
Для меня, как программиста, асинк удобнее тем, что полностью прогнозируемо, когда задача может переключиться. И практически нет проблем с критическими секциями, необходимостью ставить кучу блокировок и т.п. Для тредов умеренная проблема, если проектировать правильно, но всё-таки там это некий геморрой иногда может быть. В этом плане треды заметно сложнее.
В общем и свои плюсы, и свои минусы в каждом подходе есть.
Есть вроде бы питоновская программа gallery-dl https://github.com/mikf/gallery-dl Как её запустить из среды питона, а не через bash? Сделал как в инструкции pip install -U gallery-dl Всё установилось. Но ни import сделать, ни работать через gallery-dl URL не получается. Весь пердолинг чтобы не засирать основной ликусовый питон, а оставить в виртуальной среде.
>>2338840 А как обчно спросил и решил сам через 5 минут. Через сабпроцес subprocess.run(["gallery-dl", "ЮРЛ"]) я чёт думал он в другое место полезет к основному питону.
>>2338755 >Но в чём же тогда выгода асинхронности по сравнению с тредами? Треды переключаются через равные интеравалы времени внезависимости от того, готова задача или нет. Если у тебя висит 10 тредов, а данные получены только в одном, то планировщик все равно пройдется по всем тредам и будет бессмысленно ждать получения данных.
>>2339038 >только в определенных местах Ну-ка, в каких это местах треды предпочтительнее асинхронки? Питоновские треды это профанация из-за GIL, кроме как в работе с сетью они ничем не помогут, как и асинхронка. Но вот у асинхронки неоспоримые преимущества в виду отсутствия гонок/взаимоблокировок а также явные переключения контекста в ходе исполнения (пока не встретится await, синхронный код не прервется и левый таск исполняться не будет)
>>2338156 (OP) Блять, зумерки, хули с вами не так? Буквально на днях на проект пришел типичный 22летний мидол, уже поработал где-то и ЧСВ себе до небес взрастил. С первого же дня начал визжать на созвонах "у вас все ниправильна!! у нас по-другому было!! у вас либы устаревшие!" на предложение взять это самому в работу следовало "ой пук, ну я это... не сам же делать собирался да? я вот еще с кодовой базой не до конца познакомился, мое дело предложить..."
А вчера пилили новую репу и для нее решили вынести сервис аутентификации в отдельное приложение, чел из команды сделал это на джанго, т.к. быстро, зумерок тут же побежал в общем чате вопрошать - А пачиму на джанго? Так никрута! - Нам главное сделать быстро и чтобы это решение впоследствие работало как часы - Но ведь у нас асинхронный сервис! А джанго синхронный! - И что? - Ну как вы не понимаете! Джанга больше 30 rps на одном воркере держать не может! - Чел, у нас к этому сервису будет дай боже 2 обращения за токеном в день, ты о чем? - Ну джанго это прошлый век! Так нельзя делать!
Бля... с удовольствием переебал бы этому визгливому глисту в поддых, но жаль он на ремоуте
>>2339067 >стандарт для ГУИв, ты о чем?.. C# и electron.js так и работают > Питон тред №139 > /python/ Чел, какой стандарт? Только дохлый Киви как-то как опцию возможность предлагает. Все остальные ГУИ питона жёстко завязаны на треды.
В c# скорее тоже треды. А электрон как и питон однопоточный, там нет тредов в том виде, как хотя бы в питоне они есть. Не говоря уже про C#, C++ и Java, где треды настоящие
Нужно распознавать язык у печатного текста. Какие либы или какие апи для этого есть? Желательно полноценную проверенную либу, чтобы можно было кастомизировать под себя.
Гм. А что если запускать гуи в треде, но внутри треда все элементы в обрабатывать асинхронно? Ведь, если на кнопочку или текстовую форму вешать функционал только вида "отправь данные в основной процесс" - не получится всё заблокировать длинным участком последовательного кода?
>>2339043 > Ну-ка, в каких это местах треды предпочтительнее асинхронки? Например, если взаимодействие с сетью недолгое, на уровне 50мс. Тогда треды работают быстрее асинхронки и держат нагрузку выше. > Питоновские треды это профанация из-за GIL Пиздец, ты бы хоть почитал реализацию CPython. Нахуя ты пукаешь о том, чего не знаешь? > Но вот у асинхронки неоспоримые преимущества в виду отсутствия гонок/взаимоблокировок Зато появляется охуительный недостаток в виде блокирующего синхронного кода. И нет, вычисления на ядре ты асинхронными сделать не можешь > а также явные переключения контекста в ходе исполнения Это плюс, да
Так в чём плюс явного переключения контекста, я понять не могу? Пока вижу, что можно выстрелить себе в ногу блоком синхронного кода, который всё приложенте будет ждать. В доках прямо рекомендуется ставить await asyncio.sleep(0), чтобы дать переключиться на остальные задачи, лол. Может, вы и del явно делаете, а сборщик мусора недостаточно хорош? Бывает нужно, конечно, но в подавляющем большинстве случаев нахуй не надо.
>>2339615 > Может, вы и del явно делаете, а сборщик мусора недостаточно хорош? Ты же знаешь, что del не вызывает сборщик мусора? Ну и значение из словаря по ключу ты иначе не удалишь, если что > Так в чём плюс явного переключения контекста, я понять не могу? Для каждой задачи свое решение нужно. Нет универсального идеального решения
>>2339615 >Так в чём плюс явного переключения контекста, я понять не могу? Тем, что это страхует от race condition, это даёт то, что операции атомарные становятся.
>В доках прямо рекомендуется ставить await asyncio.sleep(0) Не помню такого в доках, хотя подход известный. Это костыль, который нужен, когда ты делаешь большую вычислительную работу, и надо иногда давать возможность другим задачам что-то посчитать.
Обычно же вычислительная работа небольшая, но зато хватает асинхронных вызовов, и поэтому такой проблемы нет.
Если же у тебя вычисления, то вероятно стоит думать о том, чтобы выпихнуть их или в отдельный тред, или вообще в отдельный процесс.
>>2339623 >Не помню такого в доках 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. Прямо не рекомендуется, но я считаю, что если так делать не стоит - этого либо не должно быть в доках, либо должно быть с явной пометкой "не надо так", а если есть в доках без осуждения, то это типа считается норм практикой.
Есть условный датакласс Entity, у него есть классовый метод, который итерируется по его полям fields(cls). Как определять тип дженерика, если тип является коллекцией? Для простоты возьмём list, нужно мне проверять list, который класс, и List, который аннотация, отдельно? Как определить, что дженерик в листе является потомком определённого класса?
>>2339676 Это нормальный паттерн, но он нужен в редких случаях, явно тут сказано про "long-running functions".
Ты должен применять с умом, чтобы, например, не было слишком частых вызовов. Операция переключения задач довольно дорогая, если на каждой итерации цикла из 10 миллионов итераций ты будешь такой вызов делать, ты просто уложишь всю производительность в ноль.
>>2339706 Не очень понятно, что тебе надо. В первую очередь когда и зачем ты хочешь проверять типы.
Проверка в рантайме это одна история. Проверка статическая, через mypy, это другая история.
В целом ты можешь описывать "протоколы", набор методов, которые тебе нужны, чтобы соответствовать требованиям. При этом при описании типа не нужно явно описывать, что тип реализует протокол, питон сам это поймёт. Коллекции всякие это тоже варианты протоколов.
Питон сам знает, что list реализует List, поэтому в джереник с типом List ты можешь спокойно подставлять list.
>>2339874 >В первую очередь когда и зачем ты хочешь проверять типы. Мне нужен датакласс, который может инициироваться со словаря. В том числе со словаря со вложенными структурами. Но пока ограничусь словарями, которые получаются из джейсонов. Для этого нужно пробежаться по полям датакласса и определить, какие из них являются опциональными и какие - потомками класса Entity. Есть inspect.isclass(), но ещё нужно определить, что класс является потомком Entity и соответственно иницировать его классовый метод на поле словаря. Но самая ёбля это определять список из потомков Entity.
Может быть тебе только и надо, что один такой цикл считать, а через сеть ты мониторишь состояние вычислений и корректируешь его.
Но эта же история и в обычных однопоточных синхронных задачах, когда ты в цикле ставишь скажем печать результата один раз в миллион-миллиард операций и т.п.
А так да, если у тебя сервис, в котором есть тяжёлые вычислительные задачи, то скорее всего надо их выносить в отдельный процесс и уже коммуницировать с ним, высылая асинхронно задания в него и ожидая результат, тоже асинхронно.
Сап. Запутался тут в одном моменте в джанго. К примеру, пользователи могут оставлять комментарии к статье и ответы к этим комментариям. И ставить лайки или дизлайки и к комментам, и к ответам на комменты. Соответственно у меня будет 3 модели: ответ, коммент и лайк. Но как сделать, чтобы у лайка была ссылка на пост, к которому он сделан? Ну то есть это может быть либо одна модель, либо другая, но не обе одновременно. Или в модели лайка сделать 2 поля ну и просто одно из них будет всегда пустым?
У меня был говнокод с фром ткинтер со звёздочкой, и так нельзя (по крайней мере я так понял, что лучше не делать, чтоб не иметь конфликтов с вызовами функций). Собственно, как шлёпать сами формочки я сносно разбрался. Ппробовал PAGE, но мне сейчас он не нужен для учебных целей так сказать.
Если поставить Label.t (сейчас я убрал везде), то работать не будет. Я что-то не так делаю, или фундаментально не понимаю. В других местах похожее всё работает. Если в коде снизу поменять на фром ткинтер звёздочка - то будет работать.
>>2340504 Какая с какой? Модель лайка состоит из автора, реакции (лайк или дизлайк) и внешнего ключа поста. Но моделей постов две. Ну я так понимаю надо для каждой модели поста делать свою модель лайков, типа как ещё. Не могут же у меня в одном поле бд храниться ссылки на разные таблицы.
>>2340500 Вот смотри что у тебя в коде > import tkinter import t > import math as m Что ты пытаешься в первом импорте сделать? Второй импорт корректный, хотя вот лучше так не сокращать, очень дурной стиль, лучше просто делать import math
Для tkinter принято, насколько я помню, импортировать как import tkinter as tk Это общепринятое сокращение Далее ты вызываешь как tk.Label, tk.Button и т.п.
>>2340524 > Что ты пытаешься в первом импорте сделать? Второй импорт корректный, хотя вот лучше так не сокращать, очень дурной стиль, лучше просто делать import math Хорошо, это понял. > Для tkinter принято, насколько я помню, импортировать как > import tkinter as tk А, понятно. А где почитать про эти "принято"? Мне пип8 советовали.
>>2340494 Так а нахуя тебе 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] вот так не работает, отрицательное индексирование не поддерживается
>>2340584 Ну не, это я для примера написал, на самом деле у меня отзывы про товар и комментарии к отзыву. То есть отзыв и комментарий не идентичны. Отзыв содержит ещё оценку.
>>2339937 >Всё равно не очень понятно. Что непонятного? Что хочу инстансы датаклассов создавать из джейсонов? >Они как раз для того, чтобы в рантайме верифицировать типы. Мне не нужно ничего верифицировать, по полям я пробегаюсь, чтобы определить, какие поля являются инстансами/списками инстансов предков Entity, чтобы вызвать их классовый метод инициализации с сответствующим ключём словаря.
>>2340589 >Ну не, это я для примера написал, на самом деле у меня отзывы про товар и комментарии к отзыву. То есть отзыв и комментарий не идентичны. Отзыв содержит ещё оценку. "Отзыв на товар" - тот же комментарий, у которого нет родительского комментария, но есть оценка. А у комментария есть ссылка на родитель, но нет оценки.
>>2340640 Ну так и разные модели значит получаются, разве нет? Или это норм такие разные сущности с похожими полями в одной таблице хранить? Прост у меня там потом ещё будет другой тип товаров, который будет содержать все поля нынешнего типа товаров, плюс будут ещё дополнительные, специфичные для этих товаров поля. Ну и я тоже думал делать для него отдельную модель.
>>2340639 >Есть ощущение, что ты пытаешься изобрести свой собственный pydantic. Вот только я не собираюсь валидацию полей словаря проводить при каждой инициализации, так что пидантик тут оверкил.
>>2340655 Вот приходит тебе жсон. Твои действия? Верить, что он корректный?
Есть ещё пакет attrs, и дополнительно к нему catts, тоже примерно для этих целей.
По описанию, ты хочешь делать какие-то модели, а для этого есть решения. Датаклассы это лишь минимальный функционал, который решили внести в стандартную библиотеку. Насколько помню, сделали его разработчики attrs.
Есть и серьёзный функционал, но во внешних библиотеках.
>>2340643 >Ну так и разные модели значит получаются, разве нет? Разные модели, которые отличаются полем? Они может для питона разные, но для БД это одна и та же таблица с двумя опциональными полями. >Или это норм такие разные сущности с похожими полями в одной таблице хранить? Так это не разные сущности для БД. >Прост у меня там потом ещё будет другой тип товаров, который будет содержать все поля нынешнего типа товаров, плюс будут ещё дополнительные, специфичные для этих товаров поля. Что-то ты там пытаешься нахуевертить непонятно. Скорее всего джанговская ORM обосрётся реализовывать твои фантазии. Поупырь свой мел и сначала реализуй таблицу/схему для товаров без специфичных полей для товара.
>>2340665 >Вот приходит тебе жсон. Твои действия? Верить, что он корректный? Джейсон приходит с бд/кэша, который трансформируется в словарь. Вот мне и нужно написать класс, который может инициализироваться со словаря, заместо перекидывания словарных литералов по всей кодовой базе.
>>2340685 >Поупырь свой мел и сначала реализуй таблицу/схему для товаров без специфичных полей для товара.
Ну так я сейчас это и делаю. Пока что у меня только один вид товаров, отзывы к ним, комментарии к отзывам и лайки для отзывов и комментариев.
Но вот типа если магазин продает там резиновые хуи и пезды, будут отдельные модели для хуев и пезд или одна? Типа у них схожие поля типа производитель, материал, цена, но разные типа длина/глубина, специфичные для каждого вида товара. А что если категорий ещё больше? Получится, что у каждого товара будет дохера бесполезных пустых полей. И при этом нельзя будет задать поле с нужной информацией обязательным для заполнения, потому что обязательная длина для хуев не должна быть пустой для пезд. Также и для этих комментариев. Получается оценка будет не обязательной, если все в одной таблице будет. Но отзыв не должен быть без оценки. Ну хз, мб это и не такая уж проблема конечно.
>>2338156 (OP) Похоже завтра с нашего проекта будут увольнять токсичного ублюдка-лида. Буквально 2 недели назад к нам в проект пришел какой-то выебистый зумерок, на позицию лида канешн. Общался со всеми крайне вызывающе, постоянно намекал что код гавно (ладно бы только это) и что все мы - гавно. Очень часто начинал свои "просьбы" с предъяв, по итогу умудрился получить жалобы к начальству не только от нас-разрабов но еще и от ПМа (как он с ним посрался, не ебу, но он талантлив в этом). Держку кулачки за то, чтобы этого мудилу выпизднули куда подальше.
>>2340729 >Получается оценка будет не обязательной, если все в одной таблице будет. Ты пытаешься натянуть бизнес-логику на структуры в БД. По факту у тебя отличие между отзывом и ответом в одном поле, относительно друг друга. Как ты будешь реализовывать эту логику в приложении, это уже от тебя зависит, но для бд - это сорта камментов к продукту.
Учусь писать красиво на numpy. У меня есть матрица MxN, я хочу из нее получить вектор длины M, где i-й элемент это самый частый встречающийся элемент в i-й строке исходной матрицы. Можно ли это сделать нампаевскими функциями в одну строчку?
>>2341278 Не страдай хуйнёй. Объединять разные по сути вещи в одно это очень дурной стиль, лучше иметь разные модели, чем кучу if-else в дальнейшей логике, причём на всех уровнях, как в обработчике моделей, так и во вьюшках.
Это больше к вопросу о разнице между отзывами и комментариев к ним.
Если же разнородные товары в магазине, то может стоит объектным образом реализовать. То есть ты не описываешь каждое поле отдельно, а создаёшь JsonField или как-то так в джанго. Эти поля имею поддержку в современных БД, например в постгресе.
Тогда ты сможешь реализовывать кастомную логику, дополнительные атрибуты.
>>2341299 >Не страдай хуйнёй. Объединять разные по сути вещи в одно это очень дурной стиль, лучше иметь разные модели, чем кучу if-else в дальнейшей логике Действительно, лучше иметь кучу таблиц, описывающих одни и те же сущности, а если кучу if...else спрятать за фабриками, то это не считается и вообще настоящее ООП. >так и во вьюшках. Видно типичного пердолика, у которого даже вьюхи должны повторять структуру таблиц БД. Такие обычно сразу <table> в разметку вставляют, когда нужно отобразить список чего-то, потому что ведь БД же реляционная, а значит должна быть таблица! И пагинация оффсетами. >Эти поля имею поддержку в современных БД, например в постгресе. Джейсон поля имеют "поддержку" не означает, что по ним можно обычные процiдурки, типа индексации, проводить. В контексте товаров данные в этих джейсонах нихуя не будут "положил и забыл, фронт разберётся", их как минимум нужно будет фильтровать по значениям ключей.
>>2341320 >Джейсон поля имеют "поддержку" не означает, что по ним можно обычные процiдурки, типа индексации, проводить. Поле jsonb в постгресе позволяет проводить индексацию. Я посмотрел, что пишут, и джанго можно заставить индексировать эти поля, но руками что-то делать придётся, через ручные миграции.
Есть нетривиальная задача. Есть две камеры AXIS 3204, пытаюсь из них собрать стереокамеру (жду поставку CM4 из Китая), так вот вопрос с OpenCV. Почему при калибровке и использовании undistort получаются мегакривые избражения? Настолько сильное искревление или хуево калибрую?
>>2339054 А почему Django взяли, рил? Flask же тоже хуяк-хуяк и в продакшн, да тот же FastAPI с готовой авторизацией и асинхронкой. Вы же ленивые макаки
Анон помоги мне сделать расово правильную асинхронную http обертку над синхронной CPU bound нагрузкой. Есть большой синхронный код (написанный не мной, а дата майнерами), который выполняется 200мс нагружая CPU. Хочется получить от сервиса 50 rps. В текущей реализации я напердолил aiohttp + multiprocessing: втупую запускаю вычисления упакованные в объект в пуле и авейчу результат. Получается около 10 rps без тормозов на 4 ядерной машине. Но я уверен можно сделать гораздо адекватнее. Ведь скрипт перед вычислениями постоянно делает одну и ту же инициализацию соединений с бекинг сервисами, например, которых можно избежать. Хотелось бы как-то заспавнить инициализированные инстансы с синхронными вычислителями и не перезапускать их слишком часто (только если исключение или очень редко для защиты от течки) и так же асинхронно общаться с ними. Как это сделать? Не укажешь направление, анон?
>>2342018 Всё зависит от логики, какие у тебя данные, и вот особенно что это за инициализация с бэкенд серверов.
Я бы по возможности плясал от архитектуры вычислительных узлов, когда ты создаёшь вычислительные ноды, которые запрашивают задание у сервера и потом отдают ему результат.
Ноды ты можешь стартовать и через мультипроцессинг, и как внешнее приложение. А упрвляющий скрипт на aiohttp будет задания раздавать и собирать.
>>2342067 >Всё зависит от логики, какие у тебя данные, и вот особенно что это за инициализация с бэкенд серверов. Если б я до конца понимал что там происходит... формально я даж не пограммист, а "devops" Имею ввиду коннекты к базе и кешу переустанавливаются почем зря при каждом запуске объекта в multiprocessing пуле. Как в похопе 25 лет назад. И какие-то прочие накладные расходы очевидно появляются. Типо запуска подпроцессов или передачи всего вычислительного объекта в процесс, хотя минимально достаточно только запрос/ответ пропихивать, а объект может работать вечно и быть запущенным заранее. >можешь стартовать... как внешнее приложение Как раз недавеча закончил подобный master/slave сервис, только еще хуже, со спавном докер контейнеров вместо процессов (нужен был отдельный сетевой неймспейс для каждого потока)... наелся сполна. Поэтому сейчас хочу как-то нативно, без изобретения велосипедов, каким-нить готовым модулем. Чтобы "фигакс", "фигакс" и продакшон.
Я хз, где спросить, поэтому спрошу у вас. Хочу освоить ботоделие в телеге, почитал чуть, понял, что чаще всего на питоне пишут, пореже на жс, ещё реже на остальных.
Так вот: если я немного могу в жс, но есть ли резон под тг-ботов тратить время и осваивать питон? Типа стоит ли игра свеч, есть ли какие-то очевидные преимущества в питоновских либах, или всё одна хуйня?
В связке celery-redis можно реализовать аналог aws sqs по типу fifo? Нужно внутри очереди организовать наборы тасков которые будут идти строго последовательно, т.е пока первый не завершится, второй не начнется. У него есть настройки приоритетов, да, но мне нужно динамически создавать эти группы через apply_async как это делается в aws при передаче message group id. Есть вариант создавать и гасить воркеры, но это выглядит не очень надёжно и хотелось бы его решать gevent воркерами. Сам доступ к aws есть, но опросы идут долго поэтому хотелось бы через redis, не rabbitmq.
Сам сервис занимается передачей обычных сообщений, очереди нужны чтоб организовать последовательный порядок обработки в пределах одной группы сообщений которые маркируются своим id. Таких групп может быть сотни. Сами сообщений обрабатываются в реалтайме.
Очень не хочется писать костыли, но решений так и не нашёл.
>>2342114 >Имею ввиду коннекты к базе и кешу переустанавливаются почем зря при каждом запуске объекта в multiprocessing пуле Сколько я представляю, ты не можешь передать коннект в другой процесс. Даже если fork сделаешь. Коннект привязан к процессу, к его PID, этот PID можно посмотреть через netstat.
Поэтому только вариант, чтобы передавать данные в дочерние процессы, а коммуникацию делать из основного.
>>2342318 Я бы делал в HTML и дальше перегонял бы в pdf.
Правда наиболее адекватные тулы использовали внешний wkhtimtopdf, были обвязкой над ним были.
Сейчас глянул, вроде есть и нативные трансляторы, но судя по описанию примитивные, я сам их не пробовал. А если вёрстка сложная нужна, то нормальный тул нужен.
Анон, стоит читать книгу Северенса? Вроде написано в 2016, но который раз упоминается питон 2 как новейшая версия, так что у меня появились сомнения о чтении
>>2342501 Слишком простая книга, на мой взгляд, лучше пробегись по его вводному курсу(питоновскому py4e который) за пару-тройку недель, там материал этой книги покрыт и есть нормальные упражнения с ответами(сначала пытаешься сделать сам - потом смотришь код препода). Чарльз гениальный лектор в первую очередь. А в качестве вводной книжки возьми Think Python, за месяц-полтора прочтешь, если не работаешь/занят чем-то.
Возможно ли писать на фласке функциями? У меня ооп никак не идёт, но при использовании функций я хотя бы понимаю, как организовать бизнес-процесс программы.
>>2342451 тоже не то, или я не совсем разобрался как это работает вот такое решение подсказали count = .....objects.all().count() ......order_by('date')[count-5:]
>>2342164 Это верно. Но это не вызывает никаких вопросов. Ведь сокет для того и нужен, что бы ядро могло знать какому (одному) процессу доставить пакет. Проблема то в другом, то что нет готового модуля, которым я бы мог запускать питонячий код в качестве подпроцессов и нормально с ними общаться: подкидывать задания для вычисления без перезапуска самого процесса (и переинициализации кода вычислителя). Нормально - это я подразумеваю что не через stdout/err, shared memory, unix soket'ы и т.д. из 70тых, я хочу современных высокоуровневых абстракций для обмена данными, ради чего я и пришел в питон - чтобы делать вещи быстро. Еще хочу получать от работающего процесса нативные исключения, а не stderr. Вообщем то все. Я сильно много прошу? Если питон не располагает такими уже готовым к использованию абстракциями, то получается он не претендует на лучший инструмент для написания обвязки запускающей питон код. Это странно, имхо. Если делать то что я хочу в Питоне руками: пердолиться с fork/unix сокетами или subprocess/std(out|err), то получается проще писать на go, в котором это все так же есть, только работает быстрее и жрет меньше памяти, т.е. даже лучше.
>>2342535 Если есть выбор между классом или функцией, то предпочтение отдают функции и в питоне советуют писать функции. Но и классы стороной обходить не надо. Без них многие вещи не сделать.
>>2342847 > предпочтение отдают функции и в питоне советуют писать функции Хм, почему? Я в контексте питона как раз слышал наоборот, что надо писать именно на ООП, а функции - мол, бессмысленная бесперспективная хуйнюшка.
Посоны, кто-нибудь имел дело с постгресовским LTree? Как path типа [2,0,1] преобразовать в дерево словарей с чилдренами? Может какая-то либа есть для этого? Или sqlalchemy это умеет?
>>2343613 Только тимлиды и еба архитекторы в крупных проектах. Во второые пробиться сложно, с первыми оверэмплоить не получится потому что будет созвон на созвоне через созвон. У меня даже на мидловой позиции приходится сливаться и выбирать приоритет между созвонами в определенные дни.
>>2343613 >что это за работа на 500к на одной ставке просто сеньор на удаленке на западного барина, 500K это всего где-то $40 в час, для них это не деньги даже
>>2343165 Все так. Бандеровский язык. Вот взять логотип Ruby - он красный, как флаг СССР. Сразу видно, что создатель этого языка был коммунистом. Не смотря на то, что во время войны японцы были на стороне Гитлера.
Плюс назван в честь БРИТАНСКОГО шоу. А мы ведь знаем, кому Британия поставляет оружие. Надо бы запретить эту змеюку подколодную, а нейросети можно писать на православном 1Скрипт: https://github.com/EvilBeaver/OneScript
>>2342534 Нет, не пойдет. Помимо основ питухона и самой джанги надо понять тему API, изучить DRF, алгоритмы и структуры, Docker, и тогда МОЖЕТ БЫТЬ появятся шансы попасть на собеседование на джуна.
>>2343775 Потому что это должно быть понятно любому здравомыслящему человеку. По крайней мере, так считают лекторы, которые туеву хучу лет шарят за это, а тут им неочевидно что бывают непонятны вещи, которые для них элементарны
>>2343921 Я понимаю примерно, просто я теперь еще понимаю, что я проходил курсы от каких-то сишников и меня учили что == False и всякое такое это норма, а Пепа на это ругается.
>>2343925 Я короче целый год хуярил конструкции вроде if not dick: do_fuck(), ну т.е почти никогда не проверял явно на None. И только сегодня совершенно случайно узнал, что оказывается None не имеет ничего общего с [0, False, ""]
Привет двач, я новичок в коде, подскажите как тренировать программирование? Когда ты на первоначальном этапе, где искать задачи? Занимаюсь этим ради хобби, хочу писать скрипты для дискорда, телеги, какую то простую автоматизацию реализовывать, что нужно делать? Про основы я уже почитал
Работаю тестером-ручником, хочу перекатиться в автомейшен. Выбираю между двумя языками, Java и Python. Опыт в программировании минимален. Что посоветуете и почему? Заранее спасибо.
Разбираюсь с фастапи, в качестве сервера поставил uvicorn, есть два вопроса: 1. Сервер работает на 1.1 версии хттп? Это же очень старая реализация, почему не 2.0? 2. Почему у гет-запросов каждый раз разные порты? Клиент же один. Или система просто берет рандомный свободный порт из всего пула? Почему тогда не взять какой-нибудь 1488? Он у меня тоже не занят.
>>2344134 >1. Сервер работает на 1.1 версии хттп? Это же очень старая реализация, почему не 2.0? А нахуя тебе 2.0 за пределами мокрых писечек на вебсокетах? Если не понял, то 2.0 - бинарный стрим, и хуй бы ты такие няшные логи в соснолечке наблюдал на два-точка-ноль серваке. Ну и то, что стримы не кешируются, делает их непригодными для большей части интернета.
>>2344159 Вот про это вообще не знал. Про бинарные стримы, кеширование и т.д. - где такую инфу вообще искать? >А нахуя тебе В моем представлении - если у приложения/соглашения/етс появилась новая версия, то значит, на это есть какие-то причины. Функционал, безопасность, удобство использования и т.д. Зачем тогда 2.0 сделали таким, что он непригоден для большей части интернета?
>>2344202 >где такую инфу вообще искать? В спеке. Но этот видосик, рассказывая про дыры хттп2, заодно рассказывает и о разнице между ними: https://www.youtube.com/watch?v=sI6YS9a7Qyg Про кэш в спеке ничего не говорится, но стримы в целом не кэш-френдли. Или точнее сказать сервер сам должен пердолить реализацию кэша стримов для своей бизнес логики. >Зачем тогда 2.0 сделали таким, что он непригоден для большей части интернета? Потому что его делал гугл для своих задач, причём с обычным пердольным подходом "а давайте сделаем бинарный протокол чтобы БЫСТРА!". Он "быстр" в том плане, что за оптимизацию запросов нужно платить усложнением архитектуры. Но большинство сайтов интернета - не мегайобы с миллионами запросов в секунду, а вполне стандартные статичные хтмл странички, дёргающие API сервера клиентским скриптом.
>>2344520 Читай про xpath и дальше можешь делать что-то вроде root.findall(".//Data") # все элементы Data на любом уровне root.findall("./Table/Row/Cell/Data") # можно детально прописывать пути
Читай в общем доки про xpath. Питон хорошо поддерживает сейчас, сторонние либы не требуются. В древние времена нужен был lxml для этого.
Сап двач. Для вката в методологию DevOps надо подучить python, для автоматизации. Видел тут книгу Автоматизация рутинных задач с помощью Pythonn, это оно? Или что ещё знать надо. Я если честно не представляю что там блять автоматизировать. Кубы крутятся, бабки мутятся. Нахуя там мой питон?
Сап. Хочу вкатиться в Питон для фриланса, до этого баловался немного и базовые вещи знаю. Реально ли освоить его и сопутствующие вещи за ~6 месяцев и 4-6 часов в день (с 1-2 выходными) для создания чат-ботов для телеги/дискорда, парсеров и прочих подобных вещей попроще (не бэкенд)? Разумеется, если не ленится и прикладывать усилия.
>>2345525 Чел, не "лучше сразу третий учить", а "нужно третий учить". Двушка уже давно в архиве, единственное, зачем её изучать - это чтобы понимать древнее легаси (но нахуй тебе это гавно).
Это что, это как, это как называется? Если в списке a больше или меньше одного элемента, то выкидывает ошибку. А как оно квадратными скобками список в число превращает, да на уровне переменной?
>>2338156 (OP) Привет двачик, привет программеры. Горит ссессия. у кого есть возможносоть мне помочь ? вот что нужно : Разработать приложение, которое просматривает папки с именами от «1» до «9», находящимися в том же каталоге (в той же папке), что и приложение, и формирует полный список текстовых файлов (файлов с раcширением «*.txt»). Формируемый список должен включать полные имена файлов. Некоторые папки могут отсутствовать (например, имеются папки «1», «2», «4», «ABC»; приложение должно сформировать списки файлов только из папок «1», «2», «4»). Для контроля наличия папки использовать стандартную функцию DirectoryExists(Directory). Параметр Directory – имя папки, существование которой проверяется. Функция возвращает ИСТИНА, если указанная папка существует.
По команде пользователя приложение формирует индекс для списка ключевых слов для всех файлов. Список ключевых слов должен храниться в файле «KeyList.txt», который должен находиться в одной папке с приложением. Формат файла: одна строка – одно ключевое слов. Приложение читает этот файл при старте. Индекс формируется по частичному соответствию (т.е. ключевое слово может входить как часть другого слова, например, ключевое слово «заказ» будет входить как часть в слова заказы, заказано и т.п.) ключевым словам. Регистр ключевых слов и слов в файле может различаться. После того, как индекс сформирован, пользователь указывает (выделяет в списке) ключевое слово и выполняет поиск файлов, в которых встречается это ключевое слово. Двойной щелчок на имени найденного файла должен открывать окно с этим файлом и выделенным ключевым словом ближайшим к началу файла.
желательно бы просмотреть потом вместе результат. Отблагодарю как смогу,я студент не особо подкрепленный в финансовой части.
>>2346056 > Индекс формируется по частичному соответствию (т.е. ключевое слово может входить как часть другого слова, например, ключевое слово «заказ» будет входить как часть в слова заказы, заказано и т.п.) ключевым словам
>>2346056 >Разработать приложение, которое просматривает папки с именами от «1» до «9», находящимися в том же каталоге (в той же папке), что и приложение, и формирует полный список текстовых файлов (файлов с раcширением «*.txt»). Формируемый список должен включать полные имена файлов. Некоторые папки могут отсутствовать (например, имеются папки «1», «2», «4», «ABC»; приложение должно сформировать списки файлов только из папок «1», «2», «4»). Для контроля наличия папки использовать стандартную функцию DirectoryExists(Directory). Параметр Directory – имя папки, существование которой проверяется. Функция возвращает ИСТИНА, если указанная папка существует. Легко.
>По команде пользователя приложение формирует индекс для списка ключевых слов для всех файлов. Список ключевых слов должен храниться в файле «KeyList.txt», который должен находиться в одной папке с приложением. Формат файла: одна строка – одно ключевое слов. Приложение читает этот файл при старте. Индекс формируется по частичному соответствию (т.е. ключевое слово может входить как часть другого слова, например, ключевое слово «заказ» будет входить как часть в слова заказы, заказано и т.п.) ключевым словам. Регистр ключевых слов и слов в файле может различаться. Если можно прикрутить постгресс, то там это встроенное. Средняя сложность.
>После того, как индекс сформирован, пользователь указывает (выделяет в списке) ключевое слово и выполняет поиск файлов, в которых встречается это ключевое слово. Двойной щелчок на имени найденного файла должен открывать окно с этим файлом и выделенным ключевым словом ближайшим к началу файла. Я в гуи не умею, не могу оценить.
>>2346077 >Если можно прикрутить постгресс, то там это встроенное. Средняя сложность. Постгрес для этого не нужен совсем. И задание не про это.
Надо просто считать сначала список ключевых слов, привести их к нижнему регистру. Потом считать файл, привести тоже к нижнему регистру, и для каждого ключевого слова проверять тупо вхождение его как подстроки в строку (всё содержимое файла). Задача лёгкая.
Нужно ли как-то хранить индекс не сказано. Но можно любым способом просто сохранить.
Самое заморочное тут гуи, потому что надо уметь с гуи работать и вообще тут какая-то динамика при этом есть.
>>2346096 >Потом считать файл А, файл уже дан. Я думал, его самому сформировать надо, то есть все корни из текстовых файлов достать (сам бы я это делать не стал, поэтому постгрес)
Насколько вообще целесообразно делать кастомные решения вместо готовых? К примеру, не хватает функционала или он наоборот излишне перегружен Такая практика часто используется?
>>2346054 Прочел почти всю книгу с пика, порешал задачи, это было ~2 года назад, сейчас собираюсь начать заново + немного могу в SQL. Алгоритмами, regex и прочим подобным не интересовался
>>2346062 >>2346077 >>2346180 ребят, я понимаю что бессмысленно просить от вас кураторства по данному вопросу, но помогите хотя бы с направлением. я по натуре художник, а не вот это всё, что поделать приходится учить не интересную хуйню, кисточки меня не прокормят, настроился изучить хоть базу, чтобы представлять дальнейшие пути развития, но материала очень много. Курю гайды, а там переменные и функции, подскажите какой этап обучения мне даст достаточно навыков, чтобы нарисовать прогу с интерфейсом как на пике.
Вот у меня лежит гайд на десктопе с данными видео : >алгебра и операторы до if > строки и манипуляции с ними > списки и работа с ними > кортежи > модули > парсинг > консрукторы наследование > полиформизм > декораторы >лямбда >регулярные выражение скюэль > заканчиваются уроки на теме зипфайл
уроков около 50 шт, перечислил хардлайнеров. мне хватит этой инфы разобраться что от меня хотят ? Что ещё покурить ?
>>2346470 Тебя интересует оператор if цикл for работа с файлами в операционной системе (os.walk, os.path, open) поиск в строке (str.find) списки (потому что ты будешь составлять список)
Этого хватит, чтобы сделать первые два пункта. Как сделаешь, возвращайся, будем дальше курировать твою работу.
>>2346470 У тебя в задании еще не сказано что именно от тебя требуют в плане GUI (точнее сказано, но расплывчато). Если есть возможность спросить на каком именно фреймворке преподу предпочтительно написать интерфейс - обязательно спроси.
Как в питоне, в виндовсе, выполнить две команды субпроцесса, а точнее команды ффмпега пасс 1 и пасс 2, в одну строчку? такаядрянь = пасс 1 ёбаразделитель пасс 2 субпроцесс.попен(такаядрянь, и далее)
Аноны, у меня такая задача. У меня есть большой набор из условно говоря десяти блоков вопросов. В каждом блоке я отбираю несколько вопросов. Как в итоге составить "билет" из отобранных вопросов?
Математику отбора я сделал (онаа сложна и не имеет значения), но вот как сделать, чтоб у меня генерировался билет.. у меня ещё вопросы с картинками и всё такое, банально в вордовском файле валяются. Я на данный момент знаю, какие именно нужно подправить и куда. В каком виде в питон это всё нужно загнать, чтоб это реализовать?
>>2346501 А ещё не забудь спросить на какой машине делать, репу, ветку, ключи, докер конфиги, версии и requirements. А и ещё тз подное попроси. Пока не ответят, даже не начинай делать
Есть список с повториющимися элементами типа [1,3,1,2,7,2,3,6] Как сделать словарь, чтоб ключом были элементы списка, а значением их количество в списке - {1:2,3:2,2:2,7:1,6:1} ? вот так чтоб было Я супер ньюфак, помогите
>>2347240 А что ты хотел. Я тут недавно задумался, сколько народу в год впускается с вузов в том же ДС и просто охуел от мысли, а где столько рабочих мест взять. Ладно бы по 200 тел в год, но их ~1к, а еще вкатуны со стороны.
>>2347258 Я когда вкатывался рассылал резюме по всем джунским вакансиям. Часто его тупо не читали конечно но спустя недели 2 зашел на собес и затащил его
>>2347258 Я так и делал в своё время. В конторах какие-то совсем неадекватные требования выставляли, я даже веб не знал, учил по тестовым заданиям. Но кодить умел, лет так 10 уже раз через раз. Отправлял везде где мог, ходил на собесы.
В итоге через месяц нашел работу, где требовался джун с опытом, а я ни тем ни другим не был даже. В резюме писал весь опыт и всё что могу со всех предыдущих работ.
Так что да, не надо ссать и бояться пиздеть. Они почти всегда ищут решительных и умелых людей. Если это обьявление тебя отпугивает, значит они успешно отсеяли тебя.
Питонисты вообще сборщиками пользуются? Ну типа как gradle, maven, gulp и прочая хрень? Погуглил, вижу десятки решений. Есть какой-то стандарт или несколько популярных?
Есть возможность делать потоки независимыми? Я пока знаком только с with threadpoolexecutor. Есть один основной цикл который раздаёт задания и запускает потоки. Но проблема в том, что если один поток будет работать слишком долго, остальные просто будут ждать его, а хотелось бы реализовать следующий сценарий. Основной цикл получает набор заданий, запускает потоки и забывает о них. Получает новый набор заданий, запускает следующий и так далее. Т.е потоки живут своей жизнью независимо друг от друга
Я правильно понимаю что такое можно сделать только через процессы, а не треды? Можно ли сделать треды независимыми?
>>2347320 Чет нихуя непонятно чего тебе надо. Треды параллельны в том смысле, что если один чего-то внешнего ждёт, то другой в это время может работать. Если один ждёт слишком дольше чем остальные, можешь вместо пула руками их делать и досыпать новые задания не дожидаясь старых. Если тебе нужно прямо чтобы оба потока одновременно процессор ебали, то это только через процессы.
Суп. Учу питон уже третью неделю и нихуя не получатся решать элементарные задачки, отсюда пропадает мотивация дальше учиться. Кто сейм? 34 лвл. Алсо, пока не работаю и все свободное время посвящаю учебе
Вот например: "Напишите функцию, которая находит число Фиббоначи по его номеру. В качестве аргумента подается целое положительное число n (число). " Решение простое, но я даже его не могу выполнить.
>>2347320 >Есть один основной цикл который раздаёт задания и запускает потоки Че?
>Но проблема в том, что если один поток будет работать слишком долго, остальные просто будут ждать его Это не то как работают Thread-ы в питоне. Ты че-то путаешь
>Основной цикл получает набор заданий, запускает потоки и забывает о них. Получает новый набор заданий, запускает следующий и так далее. Т.е потоки живут своей жизнью независимо друг от друга Гугли celery и не изобретай велисипеды
>>2347453 Берешь и решаешь другую задачу попроще. Не трать время на то, что не получается решить меньше, чем за два дня (когда вообще прогресса в решении не чувствуешь). Набивай опыт и понимание на других задачах, потом возвращайся к этим. Попробуй изучить теорию алгоритмов, оттуда появятся идеи. Тот же известный курс: https://www.youtube.com/watch?v=KdZ4HF1SrFs&list=PLRDzFCPr95fK7tr47883DFUbm4GeOjjc0 (не обязательно все проходить, понимать и запоминать, если умеешь схватываешь общую идею и понимаешь как применить).
>>2347522 > Че? Брокер-воркер > Это не то как работают Thread-ы в питоне. Ты че-то путаешь Threadpoolexecutor так и работает. Дошел до обычных thread и сделал что хотел > Гугли celery и не изобретай велисипеды Я уже месяца четыре задаю тут вопросы про celery, но кроме названия тут про него никто не знает. Вдоль и поперек обошёл его функционал и понял что он не делает то что мне нужно, потому сделал свой.
>>2347739 >Я уже месяца четыре задаю тут вопросы про celery, но кроме названия тут про него никто не знает. Вдоль и поперек обошёл его функционал и понял что он не делает то что мне нужно, потому сделал свой. Базаришь? Сдается мне ты просто доки не читал как следует вот и все. Что тебе надо-то конкретно? Из той мешанины, что ты понаписал сложно суть уловить. В celery можно создать произвольное число воркеров и произвольное число очередей, можно привязать редис а можно реббит, можно выставлять определенный приоритет таску, можно использовать разный бекенд для хранения результата, можно паковать таски в чейны, можно запускать таски по cron-у а можно откладывать на произвольное число секунд. Ты уверен что он не решает твою задачу?
>>2347746 Забудь. Человек не понимает что такое тред, что такое пул тредов а что такое процесс. Но уже пишет какие-то там "свои решения" т.к. видите ли проверенный годами инструмент ему не подходит. Очередной вкатуся с интеллектом хлебушка, но очень высоким ЧСВ.
>>2347544 Я работал с celery. Это на проекте, а не задачках.
Сам проект - чаты и сообщения. Сообщения обрабатываются долго из-за ущербного апи, примерно 2-5с. Поэтому их надо пихать в очередь. Сообщений много, массовые рассылки. Кажый чат - отдельная очередь, причем fifo, это важно. При этом желательно иметь защиту от спама одним и тем же сообщением на один чат. Так что эти очереди должны создаваться и обслуживаться на лету.
Под критерии подошел sqs. Внутри fifo есть группы fifo, т.е каждая группа обрабатывается параллельно, но внутри - по порядку. Вроде всё ок. Но есть серьезные проблемы со скоростью. У celery есть два типа воркера - prefork(процессы) и gevent(треды). Первый между тасками имеет задержку в две секунды. Второй - 5 секунд. На простой таск который просто выводит сообщение в лог такая задержка. Ладно, хорошо. Может получится с redis такое сделать? Он быстрее и те же самоые воркеры очень быстро получают таски. Я много всего обошел, доки, либы, но celery не умеет делать динамические очереди, вообще ни на одном брокере. Точнее умеет делать сами очереди, но не назначает их рабочим. А в самой связке celery-redis fifo отсутствует как явление, делать одиночного воркера на очередь это идиотизм, как говорил, таких очередей может быть тысячи, позтому нужен именно мультитрединг, который сам будет назначат один поток на одну очередь, если она есть.
Rabbit? У нас от него отказались, да и я прошёлся по нему и не нашел ничего похожего.
В команде питонистов нет. Девопса нет. Точнее есть, но он больше техлид и пхпшник, но такие задачи не делал.
>>2347758 Забить хуй на celery и пилить свое. Только не говно а ту же систему с очередью, консьюмером и продюсером. Юзай Кафку, консьюмеры и продюсеры - питоновские процессы
send - отправляет дикт в указанную очередь и название метода которым надо его обработать, как это делается в celery. В redis они сделаны в виде списков для доступа через lpush и rpop.
Очереди которые обрабатываются в текущий момент помечаются ключом в redis, через redis lock конечно, так что гонок нет. Основной тред запрашивает список всех свободных очередей и запускает каждому свой отдельный тред. Количество тредов ограничено и контролируется само собой. Тред-обработчик помечает очередь в redis ключом что он обрабатывается, так что второй такой не запустится. Обрабатывает до тех пор пока очередь не кончится. Если сообщений нет - делает паузу между опросами в 1с. Если их нет достаточно долго - тред завершается и удаляется ключ. Каждыц тред имеет своё соединение из общего пула с redis. Так же сделал gracefull shutdown. Ключи блокировок временные, так что они не зависнут.
Делал тесты. Запускал несколько воркеров на разных машинах. Загружал большой набор тасков. Дублей нет, гонок нет, потерянных сообщений нет.
Был вариант использовать встроенный queue, чтоб брать по несколько сообщений за раз, но в случае сбоя их придётся выгружать обратно, так что смысла в них не нашёл.
В итоге за пару дней - код на 150 строк. Очень быстрый. А я ебался с celery месяца четыре. Поставлю на тест в проект, грузить тасками и следить за утечками памяти, если они будут.
>>2347770 Чтоб был fifo. В случае с redis, если сделать воркера с concurrency, то они будут забирать таски вразнобой. В celery нет fifo, это должен обеспечивать брокер, например sqs так делает. Это не моё решение, какое нашёл в интернетах. Там серьезно предлагают делать одиночного воркера на каждую очередь чтоб был fifo.
>>2347765 Настолько боишься что один таск выполнится раньше другого? Сколько по времени обычно занимает исполнение одного таска по отправке сообщения? И сколько таких сообщений обрабатывает ваша система за секунду?
>>2347289 на самом деле лол в том, что они так отпугивают адекватных. Потому что реально дисциплинированный и адекватный чел реально оценивает себя и ждет такого же от окружающих. типа что написано - то и требуется. а не какая то хуйня, которую написали для прикола.
>>2347911 Быдло/нибыдло - это ведь ты никак устроиться не можешь, а не я. Я тебе прямым текстом говорю о причинах, можешь биться в истерике сколько влезет, но ситуацию это не изменит.
>>2347881 Выполнение одного раньше другого нельзя, в пределах одного чата одновременно выполнять нельзя. По времени секунд 2-5, штук 6-10 запросов на апи с кучей проверок, которые никак не распараллелить и с ограничением на 6 запросов в секунду. За секунду сколько хз, сервера на хетзере, наверное много. А приходит обычно тоже много сразу. Делаю с запасом на большие нагрузки и дублированием на другой машине.
>>2338156 (OP) Анон, я тупой, и всё такое, но как просто написанный класс, без инициализации с присваиванием имени, при запуске кода в IDE запускает блять цикл который в него вложен??? Он же должен просто глянуть на класс и закрыть консоль???
>>2348025 Отступ поправь, у тебя сейчас цикл вне функции __init__. То что он в теле самого класса выполняется это всрато, но видимо по той же логике, что и cycle = int(), который у тебя будет полем класса, одним общим на все объекты.
В питоне классы это такие же объекты как и всё остальное, class World - просто синтаксический сахар под конструкцию по выполнению которой в переменную World записывается объект, хранящий твои методы и прочую херь.
>>2348038 смотри - я создаю мир со свойством течения времени, я думал должна быть переменная которая изменяется циклом while по ходу выполнения кода и относительно неё могут происходить всякие другие функции, типа if sec == 3: пукни два раза тремя жопами, поэтому написал в теле класса вот это вот всё, а если цикл внутри __init__ то что будет ща буду тестить, хуле
так поразмышлял посидел - наверное надо выносить цикл из тела класса и обращаться к переменным как World.sec и из этого строить цикл снаружи, я просто на самом деле тупой и питон учил на степике.
>>2348078 >>2348050 Тебе бы питон подучить, алгоритмы и структуры там покодить. А то, что ты вроде как пытаешься натворить называется event loop или game loop. В движках уже запилено, нужно только разобраться как использовать.
>>2348162 Ну, я учу, потому и ищу ответы на вопросы. А читая про всякие Arcade или Pygame или PyQt5 постоянно натыкаюсь на нытьё про "мало возможностей". Пройду по ссылке, конечно, спасибо.
>>2348189 В общем проект связывает разные crm и мессенджеры. Надо проверить наличие контакта, сделки, чата с ним внутри crm и прочие такие штуки. Можно конечно часть инфы хранить у себя в базе, но это такой себе вариант. Если был бы просто один запрос, то было бы отлично, но нет. Часть методов у них работает отвратно, а некоторых нет совсем. Сами разработчики у них ленивые жопы.
>>2348222 Ещё у них бывает такая штука, что сообщения отправленные в малый промежуток времени приходят на сервер не по порядку. Приходится их предварительно сортировать по timestamp, что опять же увеличивает время обработки.
>>2348223 >сообщения отправленные в малый промежуток времени приходят на сервер не по порядку. Приходится их предварительно сортировать по timestamp Задам очевидный вопрос: хули этим не занимается фронт?
Гайс, помогите найти поистине сочный материал по тг-ботам, с учётом всех актуальностей и примером с шаблоном. Видел курс Кости Latand, но есть небольшое ощущение неактуальности его
Проблема в том, что при запросе бот выводит только 1 элемент. Почему так происходит? Сдается мне я обосрался в функции вызова. Код не весь, специально отсеял все лишнее
>>2348715 > Почему так происходит? все потому что гоблин ебанный двуличный мракобес, с пресмыкающейся пассивкой дементием, а клим гадкий гомофоб и пидорас, ну а ты каложор, все просто.
Помогите разобраться с async-await, скажите что прочитать и что накодить, чтобы понять всё.
У меня есть хуита, которая принимает запросы и работает нормально. Но иногда в async-функции она выполняет код по 40-80 секунд (блокирующий) и в это время она ни на что не отвечает, обрабатывает все прилетающие за это время запросы потом разом. Я попробовал в отдельных поток запихнуть медленный код, но из другого потока await-функции не срабатывают выпадая со странными ошибками. Я могу переписать вообще всё полностью без asyncio просто как обычное многопоточную программу (я много писал на с++ многопоточного) через свои способы синхронизации и треды, но мне кажется что в asyncio буквально две строчки кода должны быть, которые позволят в другом треде выполнять медленный код, а потом возвращаться в основной поток. Подскажите как нагуглить это, а (ещё лучше) что изучить, чтобы таких вопросов про асинхронщину не возникало больше.
Только сейчас увидел скрины выше, забавно что у кого-то то же треды и asyncio
Взял новый ноут поставил пучарм и код выполняется как будто с милисекундной задержкой, с чем это может быть связано? на старом ноуте такого вроде не было. Я даж проверил тот же код у меня занимает 2 сек а на сайтах с питоном оналйн 0.9, бляяяяя я ща свехнусь ЧЗХ
>>2348910 Делаешь threading.Thread даешь start, а потом где надо вызываешь join чтоб дождаться результата выполнения, если нужно. Если надо чтоб тред завершался вместе с основным потоком, даешь параметр daemon=True. Если хочешь запустить несколько потоков и сразу получить их результат, есть функция покороче, threadpool через with
>>2348945 > парсить xml на клятой змее без анальной боли все знают что питоняшка топовый чойз для скраппинга, НО ЭТО НЕ ТАК БЛЯДЬ !
хмл формат говна хуже жсон параши, просто люто уебанский цырк с полями без параметров
такой кококо маленький и охуенный скрапер - полная хуйня! эта параша даже стабсов не имеет, просто блядь позорище
далее пайпитер - настолько паскудное уебище что автор забил хуй и ушел на жс говно, другие додики подняли репку, но делают точно такое же говно которое не работает с новым апи, и им похуй на тикеты
селениум - ЛЮТЕЙШЕЕ ПАСКУДСТВО С УЛЬТРАУЕБИЩНОЙ ДОКОЙ я проибал литералли 3 часа на хуйне с подключением профайла
плрваврайт - уебищное название, но топовая тулза от мелкософта, вторая топовая вещь после вскода, сука там охуенно просто все, все для людей блядь, есть темная тема, а не убожество как у нихуя не прекрасного супа. топовая дока ГДЕ БЛЯДЬ ОТДЕЛЬНОЙ СНОСКОЙ ОПИСАЛИ КЕЙС НА КОТОРЫЙ Я ВЪЕБАЛ ТРИ ЧАСА сукааааа, и это мелкософт, который кормит спермоглотов пиксельхантинг игрой из 95 года, каждый раз когда ты ресайзишь окощько
суп в итоге я даже не пробовал, я опять вижу ублюдскую доку которую можно не читать нахуй по причине её пидорастии
все во что мы так верили - оказалось обманом анончик, крепись и жри говно, таков путь.
Посоветуйте плз, как лучше сделать, что я хочу. Ну и вообще, хорошо ли я придумал.
В общем, я использую дрф, у меня есть на странице набор постов пользователей, к которым можно ставить лайки и дизлайки. И соответственно у кажного поста будет счетчик того и другого. У меня есть модель поста и модель реакции, которая состоит из поля, ссылающегося на автора лайка/дизлайка, поля, ссылающегося на пост, к которому поставлен лайк/дизлайк, и булева поля реакции, типа если тру, то значит лайк, если фолс, то дизлайк. Но ещё я решил добавить в модель поста числовое поле с количеством лайков и такое же поле с дизлайками. Просто я подумал, что наверное делать запросы, считающие все лайки и дизлайки для каждого поста в таблице реакций, каждый раз, когда кто-то просто заходит на страницу с постами, это типа слишком, и поэтому подумал, что буду просто делать такой запрос, когда кто-то ставит реакцию и записывать число в соответствующее поле в таблице поста. Таким образом, когда будет просто выводиться список постов, то считать лайки не надо будет, а когда их количество будет меняться, то тогда и буду считать и записывать результат в таблицу поста. Я правильно думаю?
Ну и вот. Если эта схема норм, то тогда вопрос, куда мне писать логику, которая будет считать все лайки/дизлайки, при создании нового лайка/дизлайка? То есть у меня будет наверное CreateAPIView, создающий запись в модели реакций. И я хочу, чтобы после создания записи, он ещё сделал запрос, считающий все лайки/дизлайки для поста и записывал их в соответствующее поле таблицы поста. Я просто как-то не могу понять, какие там методы в каком порядке вызываются, когда активируется CreateAPIView. В perform_create это сделать? Или вообще как-то иначе?
>>2349068 Ну я хочу когда-нибудь на работу устроиться и делаю этот проектик как бы для изучения и демонстрации в будущем. А вроде бы для дрф побольше вакансий типа. На фронте вью использую, да.
Ананасы, подскажите, вот есть у меня простые объекты, которые спокойно сериализуются в JSON и возвращаются, а как быть правильно с объектами, имеющими ForeignKey?
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' __} }
>>2349084 Ну если это рест фреймворк, то тебе нужно в сериализаторе сообщения присвоить переменной user сериализатор юзера. Типа: class UserSerializer(serializers.ModelSerializer): __class Meta: ____model = User ____fields = ['nickname', ...]
>>2349097 Ну, в общем, смысл понятен, спасибо. А насколько хуевая идея делать какой нибудь метод внутри самого объекта, который будет просто возвращать нужный dict?
я вижу, поэтому и написал, хочешь работать в обоссаном офисе с армстроногом, вперед и с песней ебать убогую флудед жангу, томика луца не забудь перечитать, ага сука)
> да еще душная пиздорылая лягушка иди нахуй. фастапи топчик, ноудискас.
Мне нужно периодически читать показания с датчика и отправлять их на сервер. При этом требуется сделать так, чтобы при отсутствии интернета данные не терялись, а сохранялись и отправлялись при возобновлении соединения. Написал вот как-то так. Данные с датчика сохраняются в список, который и отправляю. Если сервер ответил "200", то список очищаю. Это будет работать? Не будет ли тут случая когда данные отправятся повторно, если например сработает таймаут, на самом деле отправив данные? Если такая ошибка есть, то как это устранить? Проверять на стороне сервера? Я не программист, если что не так.
>>2349382 1. Проверяй в бесконечном цикле который ждет через time.sleep, треды тут ни к чему 2. Добавь мониторинг, в случае ошибки логи должны быть 3. В принципе такой вариант валиден, но данные в теории могут всер авно продублироваться, чтобы это отловить отправляй timestamp внутри каждого показания счетчика
>>2349382 > Я не программист, если что не так. дауна выше не слушай, бесконечный луп хуита, а реализуй логику експешона, пасс это тоже хуета, делай там стак и ебашь рекурсию (я так делал (только без стака))
>>2349396 >бесконечный луп хуита Даун, у тебя асинхронный ивент луп работает на том же бесконечном цикле. И большинство скриптов-демонов работают точно так же блять.
В идеале ему конечно тоже стоит создать своего демона, который работал бы через supervisor например если на unix. Ну или на худой конец свое самописное решение через os.fork
>>2349436 Вот так в итоге оставлю, как-то работает, наверное сойдет. Только нужно еще что-то придумать со сбрасыванием часов при выключении питания. Оно конечно через NTP получает время, но не сразу. Лог пишу в stderr, systemd может оттуда брать. На счет лога опасался что он все место забьет при возникновении ошибок, но прикинул и вроде бы нормально, нужно только проверить настройки logrotate.
>в целом уебанский подход Может и так, я не претендую на звание программиста. >тут должен быть вочер за сетью, с колбеком на случай разрыва Но что оно улучшит? Поможет предотвратить какие-то нежелательные последствия сбоев? Но даже если все напрочь сломается, то systemd перезапустит.
>>2349476 >Вот кстати про поднятие демона от Бизли (стр 524). Это для старых инитов. Сомневаюсь что на это стоит оглядываться при использовании systemd.
ребзя подскажите, не знаю даже как загуглить - мне нужно получить событие, в винде звук. Как зафиксировать, что на каком-то звуковом устройстве появился звук?
>>2349514 > стоит если совсем зеленый можешь начать с квиза на мобиле, забыл как приложуха называется, но найдешь изи, она в топе
>>2349516 безмозглый даун только используя инструмент для решения своих задач можно не дропнуть через две недели.стоит
>>2349541 > винде никак. спермоглотам неположено. индусос закрытая помойка для унтерменшей, это не Операционная Система для Пользователя ( как Arch Linux ) в привычном понимании.
В общем, я тут ещё подумал, что надо ведь как-то отображать, что текущий пользователь уже лайкнул какой-то пост. Как это лучше сделать? Весь день ебался, пытаясь как-то добавить в сериализатор, выводящий список постов, ещё информацию о том, лайкнул его пользователь или нет. Но не смог в общем. Типа мне бы пришлось для каждого поста на странице делать запрос к бд и смотреть, нет ли там лайка от текущего юзера.
Я тут подумал. А может просто при логине делать запрос к бд и сохранять в localStorage какой-нибудь список всех оцененных постов? Норм идея? И дальше там добавлять/изменять эту информацию при новых лайках.
Посоны, прохожу сейчас курс по питону от работы, чёт нихуя не успеваю порешать контрольные. Сколько примерно будет стоить сделать и где можно заказ разместить? Программировать в будущем в общем-то не планирую, просто нужен перк в виде технического ДПО от московского технического ВУЗа к моему нетехническому мухосранскому в/о.
>>2349666 > Норм идея? Если ты от скуки маешься, то пойдешь, но вообще, конечно, хуита. На любой запрос сервак может отвалиться, значит клиенту нужно сперва ждать подтверждения двухсотки. А если юзер закроет таб до подтверждения? Делать полноценный двухфазный коммит? Ну это перебор немного для такой задачи. Забить на консистентность? Лучше уж базу дрочить на каждый запрос поста. Если индексы есть, то джойн быстро отработает, не страдай хуйней. > Не знаете, как такая штука везде реализуется? Б-дерево на диске по паре id поста и юзера в качестве ключа да https://en.wikipedia.org/wiki/Bloom_filter в RAM поверх него.
>>2349774 Ну не очень понял, в чем проблема. Я это планирую использовать для того чтобы фронт понимал, что ему при нажатии на кнопку надо не пост запрос на создание лайка послать, а делит на удаление лайка. Но даже если че-то там не загрузится, то я все равно в бд поставил констрейнт на то чтобы у одного юзера для одного поста могла быть только одна запись, поэтому ну типа не сработает энивей. Ошибку какую-нибудь покажу, что типа вы уже лайкали.
>>2349774 >>2349816 Ну и я прост ещё недопер, как это сделать по-другому, лел. Вот у меня 100 постов на странице например. И че мне для всех загружать все лайки вообще каждый раз когда кто-то просто на страницу заходит? Ну это же точно не умно? Я придумал, что при лайке буду считать количество всех лайков для лайкнутого поста и записывать это прям в таблицу поста. То есть когда кто-то лайкает, создается запись в таблице лайков, происходит count запрос для количества лайков к этому посту, это количество записывается в таблицу поста в поле "лайки". Таким образом, когда кто-то просто заходит на страницу, считать лайки для поста не надо будет, а просто вывести число. Но вот тогда не понятно, кто эти лайки делал конечно. Поэтому я придумал ту штуку с запрашиванием всех лайков юзера. Ну энивей это же лучше, чем каждый раз все посты на странице проверять, да?
Пытаюсь вникнуть во фронт на реакте. Он у меня как независимое приложение. Вопрос в том, как посылать запросы на бек, это вручную URL'ы хардкордить нужно, или есть какой то способ синхронизировать?
Нипонял, зачем я должен явно указывать bufsize (число) когда вызываю recv у сокета? Если bufsize будет слишком мал то я не вытащу все данные оттуда, как сделать так чтоб гарантированно вытащить из него все? Указать ебанутое огромное число?
putsocket, getsocket = socket.socketpair() putsocket.send(b'xyz') result = getsocket.recv(1) print(result) # x
>>2349947 Очевидно что можно было бы попытаться прочитать из сокета все что там есть через цикл а потом выйти из него, когда последовательность закончится. НО:
1. Когда в сокете ничего нет и мы вызываем recv, он падла блокируется и ждет появления байт (которые не придут), не возвращает никаких None 2. Это можно решить передавая в конце определенный символ который бы означал окончание последовательности и по нему выходить из цикла, но выглядит как-то по-уебански. Как заставить recv не блокироваться?
>>2349844 О, ну это вроде поможет, спс почитаю. Типа получается одним запросом посчитаю, сколько у каждого поста лайков. Ну или не одним, хз.
>>2349862 Да в гугле чет все слишком сложно все это реализуют и по-разному, я нипанимаю. Я бы в принципе мог сделать чтоб оно работало, но вот мне кажется всё, что я неправильно делаю наверное. Хочется чтоб я сделал запрос типа GET /posts/ и хуяк он мне жсон со всей информацией которую надо отрендерить. Ну вроде вот аннотация то, что нужно. Но с лайками для юзера ещё подумать надо будет. Ну я уже сделал почти как я говорил с сохранением в сессию типа. Посмотрю/. как будет работать.
В конце концов, это же в их интересах подготовить максимум качественных рабов за еду, которые задемпингуют профессию в говно. Обещают профессионалов - преподавателей, и актуальные знания в курсе. С 75% скидкой от госуслуг стоить будет копейки.
Есть тут невкатыши, которые делали стереокамеру на OpenCV и сетевых камерах? Есть охуенные вопросы касательно калибровки. Карта глубины нихера не формируется нормально
>>2350161 >В конце концов, это же в их интересах подготовить максимум качественных рабов за еду На самом деле яндекс состоит из кучи разных подразделений со своими целями. Конкретно у практикума цель собрать больше всего бабла с вкатышей но я пойду сам туда за дипломом о доп образовании
>>2349947 >Если bufsize будет слишком мал то я не вытащу все данные оттуда, как сделать так чтоб гарантированно вытащить из него все? Указать ебанутое огромное число? Значение recv ограничивает сверху, это чтобы не не подавился тем объёмом данных, который пришёл. Особенно актуально для низкоуровневых ЯП, где надо память самому выделять.
При этом функция тебе может вернуть пакет не целый, я часть. Например если ты пошлёшь сразу 10 килобайт через полноценную сеть, то на выходе получишь блоки примерно 1500 байт, чуть меньше, типа 1492, не помню сколько.
Это потому что данные идут в TCP, разбиваются на IP пакеты, каждый из которых около полутора килобайт вместе с заголовком.
У тебя единственный вариант в том, чтобы накапливать данные в буфере, пока ты не соберёшь пакет целиком. А как определять, когда пакет собрался, это уже твоя работа, или ты сначала высылаешь размер пакета, а потом сами данные, или ждёшь специальный байт или комбинацию, которая показывает, что пакет собран.
>>2349957 >2. Это можно решить передавая в конце определенный символ который бы означал окончание последовательности и по нему выходить из цикла, но выглядит как-то по-уебански. Как заставить recv не блокироваться? Лучше всего начать изучать асинхронное программирование.
>>2350189 Я сильно сомневаюсь, что основной целью яндекса было делать на этом деньги. В конце концов, тот же курс на питоне прошло только 800 человек. Едва ли это огромные по меркам яндекса бабки.
А вот эффект от демпинга на рынке для них будет просто заебись.
>>2350213 Я сам работал на втором питоне с сокетами и селектами, но это извращение.
Если прямо хочется обычный сокет и не хочется асинхронки, мало ли почему, то сокеты поддерживают работу без блокировки-таймауты. Не помню, использовал ли когда-нибудь, я уже сто лет только через asyncio в питоне с сетью работаю и не понимаю, почему не работать.
С обычными сокетами больше магии, все эти bind/accept и не помню уж чего там ещё. Всё равно придётся асинкио изучать, если в сети хочешь лезть.
>>2350217 Я сомневаюсь, что вот из этих 800 человек хотя бы половина на что-то реально способна на выходе. А и без курсов масса тех, кто программирование осваивает, самостоятельно, намного больше. Особенно студни всякой.
Я думаю, они просто осваивают рынок онлайн-образования, за котором большое будущее. Есть питон курсы, есть курсы по другим языкам и технологиям, есть не по программированию вообще.
Сейчас небольшой рынок, потом будет огромный. Это одно из самых перспективных направлений.
Я бы тут в целом больше доверял яндексу, чем другим. Всё-таки они рынок нарабатывают, а не за копейками охотятся, как многие мелкие шарашки.
>>2350217 >А вот эффект от демпинга на рынке для них будет просто заебись. Кстати яндексам меньше всего нужен демпинг на рынке. Они в силу масштабов намного легче могут платить, чем другие.
Демпинг как раз для них опасен, потому что выше риски появления конкурентов, которые при высоких зарплатах не тянут инвестиции.
>>2350213 >Я юзал легковесное соединение по паре сокетов для оперативной передачи данных внутри самого приложения, хз насколько целесообразно юзать create_server для этого Вот это совсем не понятно. А зачем так сложно? Если внутри процесса одного? Не проще ли тупо через обычные очереди, queue?
>>2350186 > stereoRectify выдает хуевые матрицы и хуле ты хочешь?
> Разница в душе не ибу, но логика должна подсказать тебе что при грамотном сетапе ты ботлнекнешься об уебищную матрицу
у меня с опенсв до сих пор срачло подгорает, если работать с анивен датой, то это ебанная свистопляска, в итоге только нейросеть смогла выдать результат без ебли и составлении охуевшей индусской карты с параметрами на любой чих
> SGBM с GUI как тут? если да то все правильно делаешь, я эту блядовину чейнил, в итоге у меня четыре окна с ползунами было лол и в каждом чето подкручивал, но это пиздец дрочь и бойлер плейт меня тресло как суку, я сначала на жсговне это сделал, но там очевидно самая мякотка нихуя не работает
советую поставить репку с гитхаба, там бывают годные обновки, я там нашел алгоритм который добавил китаец, так что буквально через три месяца он меня дичайше выручил
кароче поставь пару лампочек, освети сцену - если не поможет забей хуй, ты явно не вывозишь гуглежку и чтение СО.
>>2350217 >А вот эффект от демпинга на рынке для них будет просто заебись. Для этого у них ШАД есть, где средний чел хуй пройдет вступительнные без мат подготовки, а в практиктикум любого человека с улицы возьмут и протащат
Создал функцию которая скачивает файл и возвращает его в качестве объекта для дальнейшего использования, в случае возникновения ошибки что должна делать функция, выбрасывать ошибку или возвращать пустой объект? Как это вообще положено делать, есть ли какие-нибудь стандарты? Можете подсказать?
>>2350322 Скачивать файл в виде обьекта идея не очень. Лучше сделай генератор по файлу и пользуйся им, если он лежит локально, ну либо как-нибудь ещё. Делпй через try except и там делай что хочешь, ошибку надо обрабатывать, а не показывать. Ну, показывать в консоли надо, но главное сделать, что-то, например, выкинуть None или что там у тебя по сценарию надо
>>2350337 Мне кажется он другое имел в виду, что не в виде данных файл отдаётся, а в виде хендлера с открытым файлом. Хотя хз что он имел в виду.
Тут сложно идеальное решение предложить, если ты файл сразу сохраняешь, то надо сразу как-то придумывать, куда его в файловой системе сохранить, какое имя дать, может вообще его не нужно сохранять и т.п.
Особенно с учётом исключительных ситуаций, когда например ты начал скачивать файл, а он до конца не скачался. А ты его уже начал записывать. И что делать? Надо как-то мониторить и удалять такие файлы, и т.п.
Без внятного ТЗ я бы не рискнул варианты предлагать вообще.
ну или хуй забей если даты не много какая же джанга уебищная пиздец просто, кстати вся функциональщина типа map filter и тд и тп медленнее [лист компов]
>>2350161 >В конце концов, это же в их интересах подготовить максимум качественных рабов за еду, которые задемпингуют профессию в говно. Для этого есть студенты.
>>2350322 Это уже зависит от бизнес-логики. Ифы с возвратом None "проще", но при разрастании кодовой базы эти условные возвраты засирают логику, особенно у чистых функций. Тут тебе надо подумать, какие ошибки ты можешь обработать в контексте этой функции и обрабатывать только их в том случае, если можешь вернуть результат без изменения сигнатуры функции. А всё остальное должно прокидываться дальше.
>>2348974 Да нужно чтобы поток сам стучался в главный поток, а не чтобы из главного join вызывался. Вот примерно такой же код с таким же выводом, только существенно чтобы функция prn была async и вызывалась в главном потоке после сообщения от threading.Thread
Впрочем, можно уже забить, я сделал все без asyncio.
>>2350540 Бизнес-логика - в первую очередь формальное описание алгоритма, а не то, что тебе кабанчик там намямлил на полудневном грумминге. Вот формальное описание и описывает, должны ли ошибки ронять рантайм или втихую глушиться.
>>2350606 Ну к примеру, можно написать async функцию и вызывать через await, а можно создать thread и использовать обычную функцию. В чём разница между ними кроме специфичного синтаксиса для первого?
>>2350655 Блять, ты понимаешь вообще что такое "блокирующий"/"неблокирующий"? Ты же понимаешь бля что cpu-bound задачи не выполняются быстрее, если ты их в манятред засунешь?
>>2350672 Разницы между методами loop и asyncio.to_thread - никакой хотя нет, есть, с последним можно повыебываться и набить себе цену, якобы ты ниибацо в тренде
Еще снова получаю заваленный горизонт почему-то. Если взять флаг USE_INTRISIC_GUESS, то remap приближает изображение, а нужно сохранить пропорции. Беру FIX_INTRISIC, получае только изменение горизонта.
Если будет время глянь пожалуйста, вдруг с чем-то уже таким возился.
>>2350252 >>2350239 Но есть впечатление, что все это херня, так как нигде не видел вариантов с использованием сетевых камер. Либо намного проще варианты, либо stereoPi/Arducam. Я не могу поверить, что платы для стереокамер это серебряная пуля
>>2350778 - не используй русские менты - не используй os - не используй такую охуевшую экстракцию
упрости сцену и код до максимума, тупо белый фон и одна книга, потом добавь вторую и все это с хорошим мягким освещением
если ты с этим не справишься то гг.
какие впизду специальные камеры... в специальных камерах кроме зашитого "межзрачкового" расстояния и калибровки с завода ничего быть не может. изображение с камеры - тупой стрим кадров
причем там цвет блядь!? ты офф доки открывал? там пример ЧБ блядь!
а сама дебс мапа это фича экстракшен (тоже самое для стабилизации юзается) и матёшка с расстояниями между камер и до фич - ВСЁ блядь ну просто элементарная хуета
ближайшее с чем я сталкивался это crop visible и ротейт в горизонт по найденной доминанте
ну и фича матчинг и вообще все алгосы по фичам, но под мои дела они не подошли, поэтому не пушил далеко
>>2350803 Почему ЧБ, если 16 бит grayscale? >камерах кроме зашитого Именно, а эти AXIS по кило каждая, я еле их выставил хоть как-то. Еще и поворотный механизм для объектива. Там все в движении считай и это мешает выставить по Y нормально, так как для disparity map хорошие условия это сдвиг только по X иначе будет то что у меня выходит, это я еще с линейкой выставлял.
>>2350809 > 16 бит grayscale нахуй ты душнишь ебать?
если речь идет за чистое чб, то оно называется БАЙНАРИ и даже плотается в специальной цветовой гамме
> мешает выставить по Y нормально только твоя лень и тупость, недающая скачать уровень, сука тебе даже в строительный магазин для этого не надо идти, ууууу зумеры пиздец..
Хай. Подогнали корпоративную скидку в 70% на курсы skillbox. Тск вот есть смысл тратиться на это говно? Читал много негатива от работодатей, что выпускают оттуда дебилов. Есть у кого реальные примеры, может кто-то сам проходил. Стоит оно того или реально шляпа
>>2351064 В добавление. Знания у меня прям базовые. Сейчас в работе испольщую пайтон для запросов rest api с последующим парсингом(json/re) и выводом данных или последующий прогон через другие реквесты
>>2351210 Лучше на Степике начни. 2 курса на Степике по синтаксису покрывают первую ступень Яндекс практикума. И скорее всего покрывают материал более подробно.
А чему там на курсах учат? Чтоб погромироваиь надо знать базу, что такое методы, как устроена память и пр. Потом сам язык, но это из доков лучше узнавать. Едиственное стоящее, это паттерны проектирования, дизайн проекта, как устроена логика работы, ормки, валидаторы, их сочетание, варианты реализации тех или иных механизмов приложений и пр, на реальных примерах, а не обзорных. Вот этого не хватает в гугле. Это есть на курсах?
>>2351272 Тикетная макака как раз "переменная коробочка и ебашишь дальше" которая всегда делает говнокод, а к пониманию приходит только с опытом, но стоит ему начать писать что-то новое - будет говнокод. Потому что он не понимает как это всё работает. База в моём понимании это не зубрежка типовых алгоритмов, а умение их самому создавать.
>>2351245 А че бы и нет? По сути все операции I/O, если нужны просчеты, ну тогда да отдельно Process. Ебучий питон же не умеет в нативную многоядерность.
>>2351274 >Тикетная макака как раз "переменная коробочка и ебашишь дальше" Для 99.9% процентов задач этого достаточно, что-то больше нужно только если ты пердолишь кишочки как инстаграм делал
>>2351324 >задача: сделать из репитера - шедулер Сможем объяснить - нахуя? Для шедулера используй простой cron, если хочешь извратиться - celery, если нехуй делать - сам напиши его через create_task и asyncio.sleep
>>2351342 Модуль не на костылях это не мокрописька, тем более ты сможешь мониторить нормально, а то сделаешь потом без возможности расширения и пиздец приехали.
Меня очень раздражает, что я нихера не могу понять, как конкретно работают класс бейзд вьюс в джанго и в джанго рест конкретно. Ну типа почему никто просто не напишет что и в каком порядке происходит при их работе. В документации одни какие-то примеры на конкретных случаях. Ну либо исходный код, который мне сложно понять. Я бы просто хотел какую-нибудь статью, где бы было тупо описание класса и его методов словами, типа вот когда происходит запрос, то сначала отрабатывает этот метод, затем этот, затем этот. А то я нихера не могу понять, что мне переопределять для конкретной задачи. Каждый раз приходится гуглить, пока не найду на стаке похожий на мой случай. Заебало уже. Мб вы знаете где-нибудь такую статью? А то я не могу никак нагуглить.
>>2351348 > create_task и asyncio.sleep блядь вот ты низушник сука для тебя уже нон блокинг утилиту сделали без ебли, просто сука посчитай таймдельту и все нахуй
или надо еще пару учебников перечитать ?
> нахуя питоняшный принцип минимальной достаточности
ну или ладно.. я просто подумал что крон перезапускает целый модуль, а там такой же няшный декоратор -_-
но дату посчитать один хуй все же придется из принципа челенджовости ~_~
>>2351354 >для тебя уже нон блокинг утилиту сделали без ебли Мелкобуква, общаться научись для начала. Ты прекрасно видел целиком мой пост и все варианты что я предложил, тем не менее решил высрать максимально невалидную хуйню.
вместо работы с коробочными инструментами ты мне предлагаешь в зависимость укладывать какое то неведомое здоровенное говнище, которое будет крашится, которое надо сапортить и следить за версиями, хуе мое совместимости, а пакетный менеджер в питоняшке едва ли такой же пидорский как у жспараши
>>2351369 Не знаю, я разок использовал Jinja2 и Cheetah, а потом пошел учить VueJS, потому что это пиздец на Python фуллстак говнокодить. Либо перекатывайся на JS либо дальше REST API не лезь, теперь всем занимается браузер и тут нужен нормальный фреймворк JS
>>2351035 Сдается мне, что какой-то уебан неправильно скопировал аргументы, и там (from, to, divisibleby, suffix1, suffix2). Тогда пример: числа от 1 до 20, делящиеся на 4 и при этом не равные 12 и 16. Собственно из произведений четвёрки это и будут 4,8,20, Ну и за O(1) тоже надо бы хуем по еблу постучать, там в любом случае будет зависимость от размера диапазона и делителя, которые определят размер выходного списка.
Один шаг решета эратосфена заебашь и будет тебе счастье.
но ебливые додики дауны которым надо поебать голову, и применить хоть куда то свои даунские бесполезные книжки которые уже совсем скоро забудутся, вместо реальной работы все еще могут подумоть почему офсет_с округляет секунды
мужчины, прямо сейчас, прямо здесь. назовите лучшую книгу по питону, чтобы стать змеиным богом уже завтра. без шуток, пожалуйста. заебало читать про типы данных-хуянных, функции и классы. хочется что-то прикладное. спасибо!
>>2351658 Да хз, яб сам не отказался. Ну так, я вот делаю сайтик, гуглю что конкретно хочу, документацию читаю. Ну а так начинал делать по видосу от freecodecamp Django REST + Vue, как-то так, думаю нагуглишь.
>>2351691 А придётся. Ты редко когда будешь писать проекты с нуля. В основном будут просить либо придерживаться какого-то определённого стиля, либо дорабатывать существующий проект. Тебе дадут развивать имеющийся проект, будешь его переписывать? Хотя, сейчас в эпоху микросервисов может и дадут возможность что-то сначала делать, но эти паттерны были придуманы не просто так по желанию левой пятки. Ты каждые пару месяцев захочешь переписывать проект. Так что в любом случае, понимание и поддержка чужого говнокода это часть процесса.
>>2351693 видимо, я косноязычно выразился. Я понимаю чужой код, понимаю теорию: проходил структуры данных, системный анализ, паттерны (но в них, кстати, довольно много пробелов). Знаю про БД, нормализацию, отношения и так далее. Знаю базово и джаву, и c#, и js (спиздить чужой код - переделать под себя). Но я вижу, что у меня нет никаких навыков разработки. Я не могу сесть и написать программу, которую захочу. То есть я не могу понять, с чего нужно начать. Поэтому мне всегда кажется, что нужно восполнить какие-то пробелы, что где-то есть какая-то "таблетка для буста в программировании" в виде книги, лекций или программы обучения. Поэтому я вновь и вновь начинаю изучать всякие метаниты, learnjavascript'ы и так далее, но никогда дальше объявления класса у меня не заходит.
>>2351711 Конечно. Понять как работает эта штука. Делать, естественно с каким-нибудь git, можно github. Можно через бота делать для начала чтоб попроще было, а не через mtproto. Юзеров конектить, очереди может кое-где прикрутить, хотя можно и без. Базу по необходимости, может и редис куда пристроить найдётся. Упаковать в докер без композа(он и в проде нахер ненужен честно говоря) и задеплоить, если есть убунту. Вывести логи в графану можно через локи ну и пересборка по комиту через дженкинс, но это уже всё по желанию. Вариантов и объём реализаций куча. На начальном этапе можно обойтись и скриптом без вебфреймворка, если сделать через aiohttp и кучей воркеров, просто чтоб понимать процесс и тонкости.
>>2351715 Спасибо за советы) не всё, конечно, понятно, но начинаю писать бота с каким-нибудь заполнением формы и сохранением её в бд. Как я понимаю, это тоже ты >>2351716 >>2351717 как раз на днях хотел начать вести гитхаб с выполненными заданиями