Анон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы: 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
Сап анасы. Подскажите нахуя нужен в spark нужны таблицы? Датафреймы один в один повторяют их фунционал, но спарк же не хранилище, поматросил и бросил. Ладно там метадату хранить кокую-нибудь, но там что-то данные туда постоянна колхозят.
>>2100421 → >Ну ты с своими микросекундами просто протянешь на пару недель дольше, а потом вся та же самая ебля с масштабированием. Это не та оптимизация, которая разительно что-то улучшает. Асинхронность лучше масштабируется, чем треды.
Но главное, если у тебя задача завязана на операцию с низкой латентностью, чтением чего-то из далёкой сети, то в случае тредов плодится их огромное количество, они все висят и потребляют ресурсы. А асинхронные задачи много не забирают и там оптимальное переключение.
Конечно, всё ещё от тредов зависит, бывают специальные лекговесные реализации, в то время как переключение задач и работа планировщика в асинхронных архитектурах тоже жрёт ресурсы.
В питоне довольно дорогое переключение задач. Но при этом не проблема в одном процессе держать тысячи задач, сотню тысяч фьюч.
всем привет, сильно не пинайте, я только начинаю изучать пайтон, созрел тут один вопрос.
Я хочу в Телеграм написать бота, который будет отправлять запрос (скажем раз в 30 сек) находится ли какой-то пользователь онлайн (многие прячут эту инфу и вместо времени последнего посещения видно просто "был в сети недавно") и скидывать отчеты по периодам активности юзера. Возможно ли в теории создать такое приложение или же Телеграм блокирует такую идею в принципе?
Анон, подскажи по производительности. Есть функция, которая считает всякую всячину, добавляет это в датафрейм, потом записывает в файл. Только из-за объёма данных и скрипт, и ноутбук сдыхают на полпути. Если обрабатываемые данные делить на куски и передавать в функцию, то: 1) Можно ли в файл будет дозаписывать данные, чтобы на выходе всё таки получился один файл, а не N файлов на каждый кусок? 2) Стоит ли постоянно вызывать f.open/f.close для каждого куска? Или держать открытым файл, пока все куски данных не обработаются? 3) Что можно её придумать для оптимизации производительности?
>>2100734 >Открывать и закрывать на каждой итерации? На каждом батче, который опосаешься потерять. Если не жалко <10000, закрывай каждые 10000, если жалко каждую итерацию, закрывай каждуюитерацию.
>>2100670 А последующие данные завязаны на результат обработки предыдущих?
Почему тебя не устраивает идея, чтобы было много файлов? Не 4 миллиона, но несколько сотен, например? Это в чём-то более правильно, и так ты можешь, например, удобно распараллелить вычисления.
Дозаписывать в файл можно, уже сказали об этом, режим "a" (дозапись или создание файла) или режим "r+" (чтение и запись, но нужно, чтобы файл уже существовал).
>>2100806 >А последующие данные завязаны на результат обработки предыдущих? Нет, не завязаны. >Почему тебя не устраивает идея, чтобы было много файлов? Потому что их всё равно потом сводить в один для дальнейшего анализа, кластеризации и визуализации.
Меня, поэтому и интересует, чтение-запись насколько сильно нагружает память?
>>2100821 >Прочитал строчку, прокрутил свое вычисление, записал строчку. Это не нагружает ничего. Ты не прав, нагружает и сильно. Каждая файловая операция это системный вызов, а это дорого. Помимо того, что это насилие над файловой системой и диском, но здесь ОС может несколько сглаживать, но не всегда.
Но в любом случае, даже если ОС хорошо кеширует, системных вызовов это не отменяет.
Вот если речь о том, что 1000 раз в секунду надо записывать, то однозначно стоит оптимизировать. Если 10 раз в секунду, то в целом норм, обычная история.
>>2100828 Я ради интереса посмотрел, если файл открывать с помощью with open, на линуксе, то действительно буферизует, то есть не на каждую операцию write системный вызов делается, а на каждые 8 кб. То есть питон сначала куда-то к себе в буфер кладёт, а как 8 кб накопится, так делает системный вызов и сбрасывает данные на диск.
Под линуксом системные вызовы через strace отлавливаются хорошо.
Соответственно работает довольно быстро. Это правда на мелких данных. Может стоит тест сделать на большие бинарные блоки.
>>2100828 >то прям пиздецки тормозит, это явно не в диске дело. Я ж писал, кернель и просто питон после пары-тройки часов тупо сдыхает. Команда top в консоли показывает, что за эти часы тупо расходование памяти достигает 100%, и вероятно, идёт дальше, поэтому всё заканчивается.
>>2100826 Это что-то типа промежуточной модели, которая пилится под каждую вьюху. Можно сделать один общий механизм связывания вьюх с их моделью представления, поэтому не надо дрочиться с контроллером, достаточно описать как получать из данных модели данные модели представления, и как обновление данных модели представления преобразовать в обновление данных модели.
>>2100832 Ну ты видимо свои данные где-то в памяти накапливаешь, поэтому память и заканчивается.
Надо, конечно, сбрасывать на диск периодически.
Вот насколько часто надо смотреть. Попробуй может тупо каждую строчку записывать. Но не открывать файл и не делать flush, а просто записывать.
Избыточность системных вызовов можно отследить с помощью strace >strace python scrypt.py 2> log.txt и там смотри системный вызов write. В конце строчки размер данных указывается, если порядка 4-8 кб, значит буферизация питона работает.
Если ты будешь на каждой итерации делать flush, то системный вызов неизмежен скорее всего, иначе это не flush. Открывать-закрывать файл на каждой итерации тем более нельзя.
Вообще, Если у тебя программа стабильная, то можно смело один раз открыть файл и потом туда писать.
У меня так сутками скрипты на питоне и ноде работают, и пишут в один файл всё.
Если расчёты падучие, открывай файл снаружи функции, оборачивай функцию в исключение, и после исключения закрывай файл.
>>2100843 Нет. Операционная система сама решает на эвристиках, что держать в кэше, но в общем случае можешь работать, будтовесь файл целиком лежит уже на диске и памяти не занимает.
>>2100843 Нет. Если ты сделаешь with open("file.txt', 'r') as file: ____data = file.read()
тогда да, весь файл прочитается целиком, весь террабайт, если у тебя файл в террабайт. Ты должен читать блоками или построчно.
Если ты пишешь в файл, то никакой дополнительной памяти, кроме небольших буферов на несколько килобайт, не выделяется. Но когда ты делаешь write, то ты в качестве параметра данные указываешь. А эти данные в памяти.
Предполагаю, что если ты открываешь файл в текстовом режиме и передаёшь в него огромную строку, то выделится сравнимого размера буфер, чтобы перекодировать его в какой-нибудь bytearray. Это предполагаю, надо смотреть и думать.
Запись-чтение файла это системный вызов ОС. Ты говоришь ОС, запиши вот этот буфер в файл. ОС записывает и всё, все забивают на этот буфер, можешь использовать его заново, он больше не нужен.
Если у тебя кончается память, то где-то утечка, ты видимо что-то не освобождаешь.
>>2100847 >>2100850 Спасибо. >Если у тебя кончается память, то где-то утечка, ты видимо что-то не освобождаешь. Очевидные списки и датафрейм, которые читаются целиком. А надо частями считать и записывать.
Такое дело. Захотелось с пайгеймом поиграться, но почему-то автодополнение и линтер ВСКода от него с ума сходит. Вот на пайчарме все нормально, после импорта все подмодули видит и подтягивает, а вскод ноль. Более того плюется странными предупреждениями. И самое странное, что раньше он работал нормально.
Анончики помогите, что-то срастить не могу. Вот залил я таблицу в дата фрейм панды, и мне надо одно поле обработать и перезаписать, что я должен делать? Это придётся новый фрейм создавать или можно поменять в текущем? Честно говоря нихуя не понятно, постоянно в голову лезет логика БД, в ассоциации с фреймами.
Прошел испыталовку, взяли на позицию разраба. Первый проект как-то коряво, но сдал за 2 месяца, второй пилю уже почти месяц, и уже выгорел, как-то надо сдать через 2 недели. Зп хорошая, нигде такую с текущим опытом платить не будут. Что делать, как снова начать ебашить, как первые 2 месяца?
Помогите разобраться, а то ощущение каши в голове. Вот есть классы и их объекты. Объекты не могут быть независимы от классов, они всегда должны принадлежать какому-либо классу? Когда я пишу print('Hello') - это объект класса print? Объекты класса всегда обозначаются вызовом имени класса и указанием ()? У классов есть методы. Методы это те же стандартные функции класса def, но с обязательным указанием параметра (self)? class NewClass как оператор тоже является классом? Или это просто keyword и команда class не является классом? Чем тип отличается от класса? Блядь, как этой вообще нормально переварить?
>>2101537 Главное. Есть поле и метод, он может быть как у класса, так и у его инстанта, объекта. Можно создавать поля-методы как у класса так и у его объекта. И вызывать также. Это как переменные, области видимости, вот это все. Например, класс Писька, можно сразу переходить к созданию полей и методов к его инстантам, объектам, через селф. А можно и у класса Писька. Погугли еще наследование, полиморфизм и инкапсуляцию. В целом ничего сложного.
Помогите тупенькому пожалуйста. Смысл задачи такой. Есть 4 параметра безопасного пароля. Если хотя бы 2 из них соответствуют требованиям, то пароль безопасный. Как это собственно выразить? Можно конечно как дебил вручную подбирать все сочетания, но ведь наверняка есть нормальные решения?
И снова здравствуйте, аноны - знатоки математики. Продолжаю решать школьные ЕГЭ и наткнулся на какую-то хуету, повергающую в уныние. Задача и мое решение тут https://imgur.com/a/3qiV4OE Неужели я неправильно решаю? Гляньте кто может, плис.
Анончики пмогоите. Хочу переводить время из строки в разные часовые пояса(пикрелйтед). Но почему-то при переводе в utc_local, часовой пояс меняется, но время остаётся без изменения( например до перевеода было 17:00, и после перевода осталось 17:00). ЧТЯДН?
>>2102410 Бля, чтобы нравилось кодить нужно шарить по моему пиздец как когда будешь уже ебанить на полуавтомате то не будет так тяжко. а когда приходится постоянно разбираться и мудрить то тяжко. Одно дело когда делаешь для себя, там можно отдохнуть, подумать, почиллить. а когда сроками ебут то это ебаная потогонка, особенно если возникают мелкие непонятные ошибки , на решение какой нибудь мелочевки можно потратить пару часов гугления, это не круто. в любом случае мне кажется лучше ебаться с кодом за пекой чем в грязном гараже в масле купаться. Мне нравятся тачки и механика, я в этом понимаю , но блядь, как увижу очередной автосервис с грязью и маслом или же в своем гараже че то делаю с тачкой - да, норм, но блядь это тяжело физически и ОЧЕНЬ ГРЯЗНО. Чет нет желания на постоянку ебаться с этим. Есть конечно сервисы где все чисто и пиздато, но они не в этой стране. А если в этой то это МСК мажор сервисы для мажоров где все устроены по блату.
>>2102434 >когда будешь уже ебанить на полуавтомате то не будет так тяжко. Будет, всегда будут новые технологии, фреймворки, прочии говна. Если не в каком-нибудь сранном-легаси проекте работаешь, постоянно надо будет разбираться.
>>2102445 Уууууу, лох какой. Ты хочешь, чтобы у тебя переменная была глобальной и считалась суммарно для всех запусков функции? Тогда в функции напиши global count
>>2102466 Брали как питон-разраба. Бэк пилю на джанге. С фронтом обещали помочь, в итоге приходится разбираться с жс. Пилю веб-формы в табличном виде с возможностью вносить изменения. Данные тянутся из олап-куба, приходится разбираться в mdx-запросах, приходится агрегации многоуровневые пилить по каждому измерению, и всякие срезы делать. Сама таблица ещё должна быть динамическая, т.е. с сортировкой, фильтрами с возможностью задавать несколько значений, и много ещё чего, лень расписывать. До этого была похожая задача, но сделал её коряво, ну т.е. часть логики костыльно зашил в js-скрипт на странице, хотя по хорошему это надо делать бэке и через ajax тянуть.
>>2102551 До этого занимался аналитикой, etl и автоматизацией на питоне в полушаражке. Вся работа заключалась в достать данные (спарсить, sql/nosql), обрабовать в питоне, куда-то залить/отправить. Всё это пилит скриптами, скрипты хранил в папочках, запускались через планировщик. Кароч всё на отъебись. На новом месте взяли на испыталовку, соотвественно проект сдал, его отревьювели (наотъебись), в итоге сказали, что дальше работаю. Пришлось разбираться с битбакетом, докером, нжинкс, линтером и т.п. Платят на уровне дс мидлла, хотя коммерческого опыта разработки у меня именно как питон-разраба не было. Нет куратора, т.е. старшего питон-разраба, я один в команде питонист, но есть старшие разрабы, у которых есть опыт в бэке/фронте, которые типа мне готовы помочь. Но вся помощь заключалась, что вот есть на гитхабе репозиторий, скачай и разбирайся, делай по аналогии и по пеппа8. Хотя проекты там вообще другого плана, и фронт там на реакте, а я не успеваю за месяц и бэк на питоне написать и с реактом разобраться.
>>2102600 Потому что не было норм проектов, либо за всякую хуйню, типа пиления процедурок и пакетов для бэк-офиса или продажников мне не интересно, тем более за 90к. А тут предложили и питонить + зп охуенную. Ну я и повелся, тем более думал, что меня пидорнут по окончанию испыталова, но хотя бы на пару месяцев накоплю подушку и возьму отпуск. А в итоге взяли, и теперь мне хуево, т.к. команда нормальная, и рук хороший, но работа не нра, делаю чеоез силу и очень медленно, на стендапах приходится привирать, что уже что-то сделано, а в итоге я это делаю ночью или на след утро, либо нахожу тупые отмазы, почему мне нужно еще 1-2 дня.
>>2102797 Ноуп, на прыщах сидят красноглазики пердолики. деды сидят на том, что им всучат. Я помню работал в комп сервисе, пришел короче парень типа - блядь, винда чет глючит, бсодит. Я погонял день его комп, ниче не бсодило. Говорю ему - могу переставить виндовс лицензия. тогда 3к стоило а пиратки мы не ставили чтобы не выебали. Он такой - дорого бля. Я ему говорю - ну тогда сам поставь или вон блядь скачай линукс бесплатный и поставь. ЕСТЕСТВЕННО ЧТО Я ШУТКАНУЛ. И что ты думаешь? Этот хуй пришел на следующий день что игры бля не работают, смотрю а он реально линукс накатил, лол.
>>2102579 >До этого занимался аналитикой, etl и автоматизацией на питоне в полушаражке. Вся работа заключалась в достать данные (спарсить, sql/nosql), обрабовать в питоне, куда-то залить/отправить. Всё это пилит скриптами, скрипты хранил в папочках, запускались через планировщик. Кароч всё на отъебись. Лол, мою сейчас работу описал. Только "фронт" на powerbi. Но это тупиковая хуйня. Думаю учить dwh/какой-нибудь airflow, чтобы потом на должность типа DE перекатываться; либо идти по ветке дата сайентиста. Не знаю что выбрать.
Какие у тебя были знания жс/джанго до этого? Думаешь потом в веб перекатываться?
Flask + sqlalchemy В модели есть колонка date_creat = db.Column(db.DateTime, default=datetime.utcnow()) Но время при этом получается одинаковое у всех записей с момента старта сервера. Если при сохранении записи явно пишу date_creat=datetime.utcnow(), то все нормально. Оно и должно так работать или я что-то не так делаю?
>>2103123 Лол, ну у тебя просто значение текущего времени ставится в дефолт во время прогона этого кода и всё, как если бы ты на часы посмотрел и вручную датувремя вколотил. Какая-то лямбда-хуямбда или sql-функция нужна для этого. Не знаю как в питоне ебаном это делается.
>>2103123 >default= default вызывается один раз при инициализации. Пиши так date_creat = db.Column(db.DateTime, default=None): default = default or datetime.utcnow()
Это будет работать как if default is None: ____default = datetime.utcnow() else: ____default = default
>>2103133 >контринтуитивных решений Что контринтуитивного в том, что в функцию передаются значения? Это же не фп с lazy evaluation. Если хочешь передать функцию, то передавай функцию. Её, правда, ещё вызвать придётся отдельно.
Помогите пожалуйста решить задачу, одна ее часть у меня получилась, на вторую мозгов не хватает.
Сама задача: Выведите на экран все числа в интервале от 1500 до 2700 включительно, которые равны 7 и имеют среди своих множителей число 5.
https://dumpz.org/cn6nf6dEnCAQ - мой высер. Кратность 7 я смог выразить, а вот как найти числа с множителями 5 не могу. Надеюсь на вашу помощь, анончики
>>2103593 >Сама задача: Выведите на экран все числа в интервале от 1500 до 2700 включительно, которые равны 7 и имеют среди своих множителей число 5. В промежутке от 1500 до 2700 нет чисел равных 7 Задачу скинь нормально
>>2103593 >которые кратны 7 и имеют среди своих множителей число 5 Это одно и то же условие двумяразными словами? [num for num in range(1500,2700+1) if num % 35 == 0]
>>2103614 >Это одно и то же условие двумяразными словами? Мне так тоже сначала показалось, но вроде нет. Кратные числа, это же которые делят число без остатка. То есть x%7==0. А множитель это просто множитель. Их может быть сколько угодно. К примеру, x= a b c * 5. В этом, собственно и проблема. Вот почему я и не могу выразить второе условие, а ты, получается написал для кратности 35.
Я не исключаю, что я поехавший. Математику не учил с 10 класса, готовился к егэ по своей гуманитарной параше, вышку по которой уже заканчиваю. Все приходится вспоминать заново. Признаю, технари дали пососать гуманитариям.
>>2103630 >А множитель это просто множитель. Их может быть сколько угодно. >К примеру, x= a b c * 5. В этом, собственно и проблема Если 5 является множителем числа в твоей терминологии, то это значит, что число без остатка делится на 5. Дай нормальную оригинальную формулировку задачи. Это уебанство писать одинаковые термины разными словами.
Перекатился из-за работы в питухон из котлина, теперь тупо боюсь каждый раз что-то вызывать потому что у объекта может не быть метода, а могут быть такие каких ты не ожидаешь, а ещё никто не проставляет аннотации и поэтому хуй пойми что вообще ожидает функция увидеть в аргументе. Короче очень опасный, неуютный, при этом не то чтобы особо выразительный язык, джаваскрипт и то получше. Понимаю теперь почему для всякой руби/петухоно/пхп петушьи Go выглядит как пиздатый и современный язык.
>>2103722 Дело не в иде, лол, а в том что нужно ментальную нагрузку в голове держать что какая переменная означает и что тебе могли передать в качестве аргумента. В нормальных языках с правильной системой типов такая проблема даже не стоит и человек просто пишет то что ему нужно корректно и без задней мысли
>>2104381 А зачем вам неконсистентные данные в базе? Ок, давай свой ответ на свой вопрос, только ради христа пусть это будет не 1/6 и 1/3, соответственно, иначе я нихуя не понял.
Раз уж пошла такая пьянка с задачками, то начал курс на степике и наткнулся на такое.
Использовать можно только +, -, , *, // и %. int() тоже можно
С if решается в три строчки. Три дня бился, в итоге порешал как на пике, но в лекции указывается, что проблема с округлением в большую сторону решается иначе. На примере белорусской деноминации, берется изначальная сумма и из нее вычитается 1 рубль. Потом проводим деноминацию и прибавляем рубль. Но как применить этот способ в данном случае не понимаю.
>>2104401 >На примере белорусской деноминации, берется изначальная сумма и из нее вычитается 1 рубль. Потом проводим деноминацию и прибавляем рубль. Но как применить этот способ в данном случае не понимаю. Вычитаешь рулон в метрах, прибавляешь рулон в рулонах.
Сап, может кто сталкивался с таким и сможет сориентировать. Приходит таймзона формата "Europe/Moscow", но ее нужно преобразовать в формат "UTC+3". На ум приходит только идея со словарем, но это скорее крайняя мера. При помощи pytz костылями получилось преобразовать в MSK+0300, что не очень катит. Наверняка же есть какое-то готовое решение, но я не смог его нагуглить
Написал на aiogram бота, появились два вопроса. Суть бота в чём: через инлайн отправляю сообщение кому-нибудь в чат, к сообщению прикреплена кнопка чтобы получить inline_message_id, по нажатию кнопки делается пост-запрос на api который возвращает текст, далее автоматически этот текст заменяет тот что я отправил.
1) Если кто-то один уже отправил сообщение и нажал кнопку, то второй ничего не может делать пока апи не пришлёт ответ первому 2) Если один нажмёт на кнопку второго, то в текст второго придёт замена из последнего запроса первого
Эти вот два момента я не понимаю, вроде есть догадки что по первому пункту надо копать в асинхронность, то во втором полный затык
>>2105274 Если тебе просто нужен каждый раз новый результат, ну генерируй какой-нибудь UUID/SID каждый раз ёбана. Если результат персанифицированый нужен, то что-то придётся вкладывать в запрос.
>>2105400 Делаешь список из чисел от 100 до 500 потом через цикл прогоняешь по длине элемента если list[0][0] % 2 == 0 то продолжаешь, если нет - то стопаешь внутренний цикл и переходишь к следующему числу (элементу спсика). Если list[0][0] % 2 == 0 и итератор внутреннего цикла равен длине элемента, то аппендишь элемент к списку, который будешь отправлять на вывод.
У тебя тут получается сразу и вложенные списки и вложенные циклы, а ты говоришь, что "только начал учить циклы" лол.
Алсо я сам нубик, может чего напутал, но задачка у тебя выше уровня "только начал учить циклы".
>>2105412 спасибо, но я 10 минут назад узнал, что такое while и for, вложенный цикл слишком сложно для меня, да и задача наверняка подразумевает какое-то простое решение. Не пойму простого решения сейчас, буду сосать еще больше в будущем
>>2105440 Да это все сраные курсы udemy. Половину задач из их домашних заданий я решаю по 1,5 часа потому что их решение состоит в том, о чем в самих лекциях не говорили. Задачу выше вообще дали решать объяснив лишь про while. Про for не было ни слова, я час ебался и честно сидел и искал чего же я не понимаю. Как это вообще можно решить только через while Хорошо, что эти говнокурсы я спиратил. Придется походу яндекс практикум покупать.
За помощь спасибо, я правда половину не понял, но буду сидеть разбираться. Не подскажешь как ты учишься? Литература или курсы какие?
Колупаюсь с асиннхроностью в питоне. Вот до чего дошел. Хочу понять верно ли я понял. Смотрю видосы за видосом, хочу дойти до истины.
Синнхроный код, когда идет последовательное выполнение инструкций кода. Ну мы все знаем как это. Асиннхроный код, когда можно запускать эти все инструкции одновременно, чтобы было быстрей, и не ждать пока закончится одно и начнется другое. Тут если можно уточните плис. Процесс и потоки, разница там кароче есть. Поток, часть процесса, у них единая оперативная память как я понял. И можно все это запускать асиинхронно. Не понял вот что. Про параллелизм. Это одно и тоже что и асиннхроность или нет. Ну есть вообщем еще вопросы по этой теме.
>>2105502 Тоже хочу понять. Как это понимаю я. Есть хотящий срать питонист. Чтобы ему посрать, напишем простой алгоритм. Например: 1) Сесть на унитаз; 2) Снять трусы; 3) Выдавить какаху; 4) Подтереть попу; 5) Смыть.
Синхронный код всё это будет последовательно, в рамках одного процесса. Асинхронный код это может сделать так, что садясь на унитаз (1 поток), процесс не будет заблочен им, и соответственно не дожидаясь его полного выполнения, можно начинать снимать трусы (2 поток) и (теоретически) давить какаху (3 поток). Параллельный код это если бы мы могли этот алгоритм разбить на части, которые могут выполняться в своих процессах и со своей памятью почти одновременно. Ну т.е. теоретически садиться на унитаз и снимать трусы можно параллельно, так же как давить какаху и смывать.
>>2105502 На питоне при асинхронном программировании async/await под asyncio главная сущность это Task. Это аналог потока в многопоточном программировании.
Всё работает в одном процессе, никакой параллельности нет. Причём если в многопотоке параллельности мешает GIL, а вообще она должна бы быть, то в асинхронности и не должна.
Разница между многопоточностью в том, кто переключает потоки-задачи. В многопотоке машина непредсказуемо переключает, в асинхронности только по твоему разрешению.
Это всё про питон. На других платформах свою нюансы.
>>2105502 Есть центральный процессор. У процессора есть задачи. Есть таблица текущих задач. Есть планировщик вызывающий программное прерывание процессора, для переключения с задачи на задачу. В таблице хранится куча данных, нужных чтобы продолжить задачу с места на котором она остановилась. Называется контекст. При переключении контекста в процессор загружается уйма информации. Переключение контекста затратная операция. Но его не избежать потому что процессор вынужден обслуживать тысячи задач попеременно. Так работает вытесняющая многозадачность на процессоре с одним ядром. Но бывает что у мощного процессора достаточно времени чтобы обслуживать одну задачу, которая например читает данные из сети. Если код задачи синхронный - это означает что задача будет крутить команду NOP на процессоре пока ждет ответа от сетевой карты. Это растранжиривание времени процессора во-первых и медленная работа программы во-вторых. Поэтому придумали асинхронные задачи. Вместо того чтобы крутить NOP, задача может выполнить какие-то полезные действия еще. Для этого задачу разделили на две: один код читает из сетевой карты, а другой, например рисует прогресс бар. Сделать эти две задачи как полностью независимые, с разными записями в таблице задач слишком накладно по времени, замедление на переключение контекста может быть большим, чем простой в ожидании ответа. Поскольку эти задачи имеют единый контекст, то придумали механизмы переключения между такими задачами, без переключения контекста. Это так называемые потоки.
Если у тебя много процессорное устройство, то есть возможность запускать задачи параллельно. Но поскольку у тебя нет тысяч процессорных ядер то вытесняющая многозадачность никуда не делась. Распараллеливание задачи - это распределить вычисления по процессорам более равномерно. Асинхронность это не стоять как даун на месте, когда планировщик по таймеру выделил время на твою задачу, а заниматься полезными делами если они есть. Например один из вариантов асинхронности - запустить бесконечный цикл и проверять в нем нет ли событий в очереди на обработку подзадачами.
>>2105538 >Асинхронный код это может сделать так, что садясь на унитаз (1 поток), процесс не будет заблочен им, Для понимания асинхронности очень хорошо опыт программирования на nodejs иметь, серверного. На фронте такие вещи не очень актуальны.
Там два способа реализации асинхронности, старый, через callback, и новый, через async/await и промисы по ними.
Коллбэки это такая асинхронность в истинном смысле этого слова. Ты выполняешь код и указываешь фукнцию, которую надо запустить по итогу какой-то операции, а сам продолжаешь работать, не зная результата. Надо довольно сильно перестроить мозги, чтобы вот с этим работать.
async/await это механизм, который позволяет сделать асинхронный код так, чтобы он выглядел как сихнронный. Асинхронное программирование становится похожим на обычное многопоточное, только проще.
>>2105556 Да никакой опыт на ноде не дает понимания асинхронности если в саму библиотеку uv не лезешь. Вот и ты называешь колбаки и асинк-эвейт синтаксис "разными механизмами" асинхронности.
>>2105557 Залезание в библиотеки тебе никакого понимания не даст. Не больше, чем залезание в ассемблер для понимания ООП. Если что, что смотрел то-ли libuv, то-ли libevent и игрался с ними на сях на примитивном уровне. Не думаю, что это моё понимание улучшило.
Механизмы эти принципиально разные для программиста и для возможностей, которые они дают. Ты не можешь просто переложить код async/await на обычные промисы. То, что там в самом движке JS при этом та же библиотека используется ничего не значит. У тебя нет возможности из JS работать с этой библиотекой.
>>2105564 Залезание в ассемблер для ООП не даст (и то даст понимание реализации ооп в реальных языках), а для понимания асинхронности даст, потому что вопрос на прямую касается времени выполнения на процессоре. Прост не надо прятаться за за магическими "вещами в себе". Эвент луп в ноде это не вещь в себе а простая модель асинхронности. Зеленые потоки - другая. В этом и есть понимание
>>2105571 Такое ощущение, что ты прочитал несколько low level статей, и теперь бравируешь этим. Хотя не осознал, зачем это нужно вообще. Но сбиваешь с толку, вот начиная с этого >>2105552
>потому что вопрос на прямую касается времени выполнения на процессоре Причём тут процессор вообще? Когда ты ждёшь данные из сетевой карты, твой процесс не крутит вечный цикл, твой процесс блокируется на системном вызове. Всё. Что там происходит внутри операционной системы и её планировщика это уже другая тема, тебя, как разработчика, она не касается, ты в это никак влезть не можешь вообще и тема асинхронности-многопотока не имеет к этому никакого отношения. ОC в это время будет гонять другие процессы, и всё.
Ты сбиваешь с толку, видимо потому, что сам не осознал.
>>2105583 Ебаный рот этого казино... Ну как не имеет. Был вопрос чем отличается процессы от потоков и чем отличается асинхронность от параллельности. Ты теперь утверждаешь что вопрос больше относится к языкам, а не различием этих понятий на низком уровне? Ты еще утверждаешь что на низком уровне нельзя понять асинхронность?
>>2105589 Был вопрос от человека, который не понимает самой базы. Это значит, что если не игнорировать, надо вот эти базовые идеи объяснять, а не толкать что-то, что отношения к делу не имеет.
Само понятие асинхронность слишком общее, не про реализацию на питоне и не про async/await. Потому что async/await нужны для того, чтобы асинхронная программа выглядела для программиста как синхронная.
Вот пример. Я прихожу в компанию, говорю "я Василий Пупкин, хочу у вас работать, жду ответа". И пока не получу ответ, например "сейчас нам сотрудники вашей квалификации не нужны", не ухожу, сижу в офисе. Это синхронная работа. А асинхронное выполнение, это когда я прихожу, предлагаю пойти к ним работать. Мне говорят "мы вам перезвоним, ждите звонка", и я ухожу домой, делаю свои дела и помню, что мне должны позвонить.
async/await в таком варианте, это когда я ухожу домой, но не занимаюсь другими делами, а сижу перед телефоном и ничего не делаю, потому что жду звонка.
>>2105622 промисы это js В js на базе промисов async/await сделаны в том смысле, что async функция возвращает промис. Но оператор await не получает промис, он ждёт его разрешения, и вот в этом главная фишка.
Потому что callback асинхронность предполагает, что если ты сделал асинхронных вызов, то ответ ты не получишь НИКОГДА. Нет никакого способа в твоей функции узнать результат. Твоя ветвь исполнения умрёт, не узнав результата. А вот коллбэк будет знать, ты просто можешь объяснить ему, что делать дальше, и он продолжит твоё дело. И это довольно сильно надо мозги извратить, чтобы вот к такому стилю программирования привыкнуть. Тут все эти callback hell возникают.
await оператор качественно меняет картину. Твоя ветвь уже может дождаться результата. Считай, у тебя просто как синхронная программа, похоже на многопоток. На некоторых платформах await ждёт результата из другого потока.
В питоне аналог промисов это Future, но вообще async/await другие, чем в JS. В питоне задачи надо создавать явно, просто await асинхронной функции задачу не создаёт, и асинхронности тоже не создаёт, тут можно больно споткнуться.
Кто-нибудь может пояснить как вообще PyCharm импортирует модули? Запуск pytest из pycharm -- все гуд, но стоит запустить pytest из цмд - ModuleNotFoundError: No module named 'dicklib'. Я насколько понимаю, PyCharm смотрит доступные для импорта модули относительно корня проекта, а python - относительно запускаемого скрипта, но можно ли заставить их вести себя одинаково?
>>2105874 >>2105875 Ясен хер я в венве работаю и в цмд венв активирую. Я наверное плохо пояснил. Короче есть следующая структура проекта: project core class_a.py class_b.py tests test_1.py test_2.py
Тесты импортируют core.class_a.* Если попытаться из cmd из корня проекта запустить pytest (или просто python tests\test_1.py), то будет жалоба на не найденный модуль core; PyCharm же все находит. Вот и вопрос - втф?
Почитал книги из ОП-поста, ни одна не подошла. Все написаны какими-то странными людьми совсем без дара объяснения. Даже "питон для детей" оказалась околоакадемической по стилю изложения, просто в детсткой стилистике. Короче, книгу на человеческом языке для dummies, пожалуйста. Не могу освоить язык дальше классов, совсем не вдупляю. Нужно хорошее руководство.
>>2106027 Дальше классов только практика. Тебе надо на кодворз, рубиться там до посиннения. На одном только 7ку ок 1500 кат, тебе хватит чтобы понять что к чему, чем выше тем и уровень выше, и сложность. Но там надо алги знать и решения не трвиальные, а для прокачки базы может хватить, по крайней мере там типовое вообще все есть, про листы особенно. Ну и пет проекты. Нужно уже пилить чтот свое. Я вот рублюсь на кодворзе. Встал на пет проекте, хз что пилить. Все откладываю джангу и апи, хочу что-то простое запилить с апи, чтобы было по феншую, типо сервис и доступ по апи к нему, как-то так. Еще понять про бизнес логику, про процессинг, про это все, ну типо сервис, обменник, или что-то в этом духе. И еще встал на процессах, асиннхрости, на вот этом все. А ооп как раз таки далось легче. И тут пишут про понятные учебники. Их нету. Остается только ютуб смотреть до просветления. Уже ни один курс просмотрел по питону.
Вчера купил персики у таджика. Попробовал. Персики оказались неспелые. Сегодня покупаю у него арбуз, сказал ему про персики, он типо, ну он не знал, сори, сделал скидку на арбуз. Еле дотащил. А, к чему я это. Зашел базар за питон, за асинхронное программирование, все дела. Я попросил его пояснить за все за это. Вот результат, с замерами, не благодарите. Пожалуй единственное видео где таджик четко поясняет за мультипроцессинг, мультитрединг и асинхронщину. https://www.youtube.com/watch?v=R4Oz8JUuM4s&t=1198s Можете задонатить таджику.
Так блять. Я может тупой, но какого хуя время исполнения теста отличается от того что выдает пайтест в 10 раз? Нахуярил принтов на все тир-дауны и тирс-апы - они дают одно время, а потом хуяк - мне пишет другое время. В чем проеб то?
>>2106647 Ну вопрос не столько к коду привязан. "Брейкпоинты" идут на всем продолжении теста от сетАпа до обоих тирДаунов. Я грешу на то, что идет слишком долгий сбор, но все равно хуйня какая-то
>>2106752 Визуально - есть. Запустил реальный таймер и примерно столкьо же и работает. Я запускаю конкретный тест из набора тестов, кроме него ничего не должно выполняться.
У тебя ошибка замера времени. Судя по всему, ты используешь таймеры работы скрипта, которые считают, сколько ЦПУ-секунд съел твой скрипт.
Надо смотреть вот на эту часть. Проблема в том, что они считают только текущий процесс, хотя это норм в данном случае, и считают чисто ЦПУ-время, а не общее, то есть работа в режиме ОС и просто простой не учитываются.
Это примерно как time в линуксе, который показывает тебе три значения, общее время и время работы в пользовательском и системном режимах. pytest тебе общее время показывает, о твой замер процессорное.
Попробуй добавить в печать просто time.time() или time.monotonic(), без разницы особой.
>>2106765 Бля, короче говоря я даун. Кучу времени неучтенного оно применяло миграции - сменил таймер, выключил миграциии - тест начал выполняться быстрее.
Анон, есть скрипт у которого есть разные режимы работы. Как-то можно через консоль передавать параметр, который будет запускать скрипт в том или ином режиме?
>>2106817 Поясни стоит ли вкатываться в автоматизацию. Бывают ли интересные задачи или это написание шаблонных тестов по кругу? Что с зп? Что в основном юзают uniitest или pytest? Сегодня будет собес на стажировку, думаю идти или нет если возьмут.
>>2106981 >Поясни стоит ли вкатываться в автоматизацию Как минимум на минимальном уровне ты эту хуйню знать обязан, юнит-тесты всегда нужны. >Бывают ли интересные задачи или это написание шаблонных тестов по кругу? Понятия не имею, не тестировщик. По своему скромному опыту - основные "интересные" задачи были с тестированием с помощью Селениума, там иногда довольно сильно попердолиться приходилось, чтобы нормально заработало. >Что с зп? Что в основном юзают uniitest или pytest? Понятия не имею, я прежде всего бекендом занимаюсь. Юнит-тесты нужны только чтобы убрать прослойку из ручного тестирования АПИ.
>>2106981 >Что в основном юзают uniitest или pytest? Вот с этим просто, unittest уже давно приобрёл статус legacy и полностью вытеснен pytest'ом, остаётся только на каких-то старых проектах.
>>2107016 >Юнит-тесты нужны только чтобы убрать прослойку из ручного тестирования АПИ. pytest можно спокойно использовать для тестирования чего-то внешнего. Как просто питон для этого используют. Я вот когда-то по работе использовал питон, чтобы компилировать и запускать сишные программы, тестируя их вывод - это было давно, и без фреймворков. Но с pytest такую работу можно было бы стройнее и удобнее делать.
Если что учить, то однозначно pytest. Хотя ещё какие-то фреймворки есть, кроме этой пары. Но наверное стандарт сейчас pytest.
>>2107031 >unittest уже давно приобрёл статус legacy и полностью вытеснен pytest'ом Только тот же Джанго все еще на юнит-тесте, хотя ничего не мешает запускать тесты пайтестом. >pytest можно спокойно использовать для тестирования чего-то внешнего. Как просто питон для этого используют. Ну я про конкретно свой случай говорил. >сли что учить, то однозначно pytest На самом деле похуй, они не настолько отличаются, чтобы ты не смог после по разному ассерты написать после. Главное чтобы человек понимал принципы.
>>2107211 Разобрался уже давно без тебя. Ну и к чему твои возмущения? Тупо склонируй проект и попробуй это запустить. Нихуя не выйдет, потому что, ебать, сначало надо перейти в ебучую папку и попробовать вызвать эту функцию, потом доустанавливать кучу либ, которые не указаны, потом править сами эти файлы, потому что автор положил хуй на баги, и так просто оно не запускается. Ты бы лучше возмущался о криворуких долбоёбах, что выкладывают свои высеры, не снабжая должными комментариями и списком зависимостей, а на пользователей, которые пытаются эту срань запустить.
>>2107276 > А None в памяти компа тоже выглядит как какое-то число Конечно. Всё выглядит как какое-то число. >просто нам (питонистам) это знать не надо? Сами решайте, что вам надо и не надо знать. Даже если где-то ответа на твой вопрос нет, всегда есть ультимативный авторитет в виде исходных кодов. Всё, что есть, всё там, и именно так, как оно работает.
>>2107280 >Конечно. Всё выглядит как какое-то число. Ничего не выглядит как число. Есть только сигналы той или иной модуляции и той или иной амплитуды. Иными словами есть только электроны, которые крутят вентили в транзисторах.
>>2107398 > электроны, которые крутят вентили в транзисторах Просто так выглядят числа. Закорючки на измельчённых мёртвых деревьях тоже никакой неотъемлемой "численности" в себе не несут, просто мы решили, что это числа, поэтому это числа.
Это точно так и задумывалось? Можно какой-то комментарий - во первых зачем он настолько жёстко замещает результат функции, а во вторых как это примерно работает? Какое-то очень непоследовательное выполнение кода, оно хранит где-то все finnaly (что логично), и даже при выходе из функции выполняет их и может повлиять на уже передаваемый результат функции? Всё хорошо с тем, что оно влияет на значения переменных, ведь это и есть назначение finnaly, но то что оно замещает результат функции...
>>2107567 Насколько я помню, return это не безусловный выход, он просто сохраняет это значение, потом отрабатывает finally и перезаписывает его, и уже тогда происходит выход из этого участка. Ну а в целом надо курить dis.dis и исходники вм питоньей.
The return value of a function is determined by the last return statement executed. Since the finally clause always executes, a return statement executed in the finally clause will always be the last one executed.
Сап, питонисты Вкатился к вам поскольку уже заебался тыкаться не туда В общем, суть в чем, я довольно неплохо знаю кор питон, структуры данных, скуэльчик и всю базу в целом знаю хорошо Но я уже несколько месяцев просто не знаю за что взяться Думал взять фласк, но боюсь, что мне станет скучно дрочить веб Смотрел в сторону мл, но боюсь, что мой матан на уровне слабенького понимания интерполяции не вывезет В общем, реквестирую какой то годный пул проектов для начинающих или просто советы в какое направление смотреть Благодарю
Какой в пичарме хоткей выравнять и отформатировать текст? Ну типа в середине обернул кусок кода в иф, дальше приходится все руками табить. Наверняка есть хоткей.
И второе, как разом закомментить выделенный текст?
Как организовывать взаимодействие между приложениями внутри django приложения? Как они общаются? Материалов по этой теме мало и все говорят только в общих словах.
Аноний, подскажи нубу, как правильно проверять входные переменные класса? Например, есть класс: class S1(): --def __init__( ----self, ----x1: Union["PreTrainedModel", "TFPreTrainedModel"], ----x2: PreTrainedTokenizer, ----kwargs ----): ------super().__init__( ------x1=x1, ------x2=x2, ------kwargs, ------)
Как проверить, что x1 и x2 пользователь указал при инициализации класса? Как в случае, если не указал, присвоить им значения по умолчанию внутри класса?
>>2107715 Тоже сначала подумал что веб это хуйня какая-то, потом решил для начала его подрочить, а потом уже за мл взяться и сейчас ахуеваю какие сложные штуки крутятся в вебе и просто балдею от всей этой инженерной движухи
Вопрос от студентоты. Так вот начал изучать Django, пилю свой сайтик с PostgreSQL - так просто руку набить (все понятно, все нравиться) Скажите пожалуйста, не останусь ли я не удел в скором времени, в связи с появлением конструкторов? Сегодня, например, смотрел конструктор уже от ебаного ТиньковБанка, лол. Продолжать хуячить web и Djang'у или стоит переключиться на что то другое, в целом интерес интересом, но и перспективы для тоже важны Повторюсь я кроме книжек и теории пока далек от реальных дел в мире IT, потому и вопрошаю к вам господа..
>>2108786 ты заебал нахуй тебе матан в мл? там блядь методы как и везде в питоне. никто не требует с тебя писать свои блядь рукописные методы. да ты и не сможешь. для этого надо быть математиком нахуй гениальным. все известное методы и модели обучения уже давно существуют и записаны в библиотечные методы.
>>2108676 >Скажите пожалуйста, не останусь ли я не удел в скором времени, в связи с появлением конструкторов? Про конструкторы говорили ещё 20 лет назад, 20 лет назад они появлялись, и... Ничего. На самом деле конструкторы могут решить только какие-то шаблонные задачи. Но всегда есть нешаблонные.
Программирование про сложность взаимосвязей. Чем сложнее то, что ты делаешь, тем удобнее это именно программировать, чем настраивать мышкой в конструкторе.
Опасность в другом, что бизнес уйдёт на готовые платформы-агрегаторы. Вместо того, чтобы делать свой сайт, будут делать страницы в соцсетях или на каких-то агрегаторах вроде Озона. Там возможности примитивные, но там можно делать бизнес, потому что аудитория тоже уходит туда из традиционного интернета.
>Продолжать хуячить web и Djang Веб это технологии, а не просто сайты. За вебом будущее как за технологией, потому что всё идёт к тому, чтобы делать через веб-интерфейсы.
Django это просто платформа для крудов. Но это хорошая платформа. И это несколько ключевых технологий, то есть умея джанго ты будешь владеть каким-то набором технологий, и сможешь другие вещи осваивать.
спасибо бро да на самом деле что в матане, да и в топологии ничего сложного нет - если ты конечно не решаешь какие то еще нерешенные задачи или доказываешь то, что еще не доказано (у меня образование как раз в околоМЛ сфере,лол, но посля я все забросил) Когда начал слушать лекции по мл, увидел сплошную математику, ну и решил, что нахер оно мне все это по второму кругу, хотя конечно все это интересно, но уже времени нет. Понятно, что это просто теория которая объясняет, то о чем ты написал
Питоны, хочу клиента к api одного сервиса запилить, стоит ли прикручивать валидатор json, какой-нибудь pedantic или пустая трата времени? И если я захочу, чтобы у меня были синхронные и асинхронные методы, то мне надо будет дублировать все методы с запросами?
>>2108786 Я писал именно про инженерно сложные штуки, когда у тебя есть сначала один сервер, потом ты выносишь бд на отдельный сервер ибо не хватает ресурсов, потом фронтент веб сервер отдельно, потом появляется несколько бекенд вебсерверов, потом еще отдельный сервер для какой-нибудь отдельной задачи, при этом это все великолепие друг с другом общается, само обновляется, само поднимается и тестируется и главное решает проблемы бизнеса, это тебе не создать класс Классификатор() и не дёрнуть у него метод процесс_дата_фрейм(дата_фрейм)
>>2108676 Если ты джангу учишь ты и не соревнуешься с конструкторами какими-то, у джанги сейчас другая цель и никто шаблонизатором, например, не пользуется почти, потому что сейчас бек это штука которая отдает джейсончик тебе на фронт, а этот джейсончик берется из баз данных, других сервисов и определенной логике, а конструкторы дают возможность писать дефолтные магазины и лендинги, которые ты и не будешь писать на джанге, ибо зачем?
>>2109416 Джанго для крудов. Для того, что ты описываешь, джанго не нужна.
Круды жили и будут жить. SPA архитектура ограничена. Например тебе сложно поддержать ссылки на страницы, SPA тупо индексироваться как надо не будет. А традиционное приложение на джанго будет хорошо индексироваться, ты сможешь ссылаться на страницы, ходить по ссылкам и т.п.
Технологии SPA появились больше 10 лет назад, уже тогда были приложения. Но до сих пор они не вытеснили традиционный веб.
>>2109367 Что ты называешь валидатором json? Pydantic в некотором роде валидатор. Ну то есть из json ты получишь структуру с нужными тебе провалидированными полями.
>у меня были синхронные и асинхронные методы, то мне надо будет дублировать все методы с запросами? Я бы сказал, что у тебя должна быть синхронная функция, которая занимается валидацией. Эту функцию ты можешь вызывать из какой-то асинхронной задачи.
>>2109428 Смотря что ты подразумеваешь под традиционным вебом, часто сижу на хх и требование шаблонизатора почти нигде нет, джанга хороша тем, что если тебе не нужен го сеньер для 100500рпа, то ты пишешь апишку на дрф хоть тяп ляп и в продакшен, если у тебя наврятли будет даже 10рпа, то тобе не нужны эти асинхронные фреймворки и прочее, а вот как раз писать на джанге традиционный веб мне непонятно зачем, если на рынке есть тонна пхпшников, црмки и конструкторы, в общем все от задачи зависит и не стоит забывать что spa это далеко не единственное чему нужны апи, есть мобильные приложения и другие апи
>>2109431 >Ну то есть из json ты получишь структуру с нужными тебе провалидированными полями. Звучит как валидатор. Мне бы хотелось чтобы и запрос и ответ проверялись. То есть создаю инстанс объекта, при создании всем всё проверяется(если оно так работает), потом сериализую в json, отправляю. Ну и с ответом все в обратном порядке. Просто не уверен стоит или оно того.
Питоняч, помоги. Парсю сайт с помощью BeautifulSoup и проблема в том, что выдергивается только часть контента, который мне нужен(ссылки). Структура html, классы - все аналогично, но в итоге выводятся только первые десять ссылок и все, хотя на странице их 100. Из за чего это?
>>2109527 Скорее всего тебе пидантика достаточно. Его именно для таких задач и создавали.
Твоя задача чётко типизировать модель. Ты можешь прописать свои дополнительные валидаторы на поля любой сложности. Ты можешь настривать поведение, что делать со сбойными пакетами. Ты можешь настраивать поведение, как экспортировать поля в json, что делать с Optional полями, которые None, что делать с полями по-умолчанию.
Причём пидантик распарсит и вложенные поля-модели.
В каких-то случаях внешняя валидация тоже может быть полезной, но в целом, думаю, надо в первую очередь на пидантик смотреть.
>>2109788 В браузере нажми F12 (Firefox/Chrome точно), там тебе откроется панель, смотри вкладку Network, там ты можешь видеть всю активность, что в какой момент подгрузилось, можешь смотреть заголовки и ответы и т.п.
Я работаю в файрфоксе, там это очень хорошо сделано. В хроме есть тоже, но ничего про хром не скажу.
Столкнулся с проблемой! Есть код, работает через вк_апи. Прикрутил к нему прокси, и, видимо, из-за нестабильности прокси сервера программа зависает. При этом, таймаут ошибка не вылезает (вк_апи работает через реквестс). Есть предположения как решить?
>>2100419 (OP) Сап питонач. Необходимо очень большую строку в файле преобразовать в нечто типа "переменная нейм += кусок данных строки" т.к. необходимо впихнуть эту строку в код.
Сделал скрипт вида: from pathlib import Path tex= Path('1.txt').read_text() print(len(tex)) alltext = str() for i in range(0, len(tex), 24): alltext += "Str += \"" + tex[i:i+24] + "\"" + "\r\n" res = open("res.txt","w") res.write(alltext) res.close()
Но при копировании этого в файл res.txt выходит вот такая херня как на пикриле с пропажей одного символа. Что не так с чтением строк в питоне или у меня код полное говнище?
Подскажите курс/книгу/туториал для тех кто уже более чем знаком с языками программирования и с разработкой (пусть и любительской), а то открыл на ютубе пару первых попавшихся туториалов, так они для объяснение переменных используют аналогию с коробками, да так медленно ещё всё разжёвывая. Мне же скорее надо, вот переменные они бывают такие-то и такие-то в питоне потому что... а вот примеры с подводными камнями. Короче, если тут есть кто уже зная программирование пришёл в этот язык, подскажите, что использовали для изучения.
Я тут на днях читал про устройство работы пхп, и там, как я понял, на каждый запрос к серверу создаётся отдельное подключение, которое убивается после того, как запрос отработает. А в плюсах наоборот держится одно соединение для всех клиентов. Интересно, а как в питоне это работает?
>>2111851 asgi (асинхронный подзалупный сервер который имеет ивент-луп и перебирает асинхронные таски) wsgi (синхронный подзалупный серв, внутри как правило будет юзать треды что позволяет избегать блокирования на тасках но т.к. это питоновские треды то CPU-bound таски они не ускоряют)
>>2111851 Здесь определяет то, как настроен сам сервер, у тебя в промежутке что-то стоит, иногда несколько. Например связка nginx + uwsgi/gunicorn, или asgi.
Aiohttp работает напрямую, без asgi, то всё равно ты за nginx его ставишь обычно.
Ты другое имел в виду, я думаю.
Специфика PHP в том, что на каждое подключение создаётся новый процесс, причём именно процесс, а не тред, насколько я помню. Этот процесс отрабатывает результат и прибивается.
В то время как на других платформах обычно один и тот же процесс отрабатывает много соединений подряд, то есть обслужил один запрос, потом следующий, и т.п.
>>2111858 Меня больше не 200 статус смущает, так делают иногда, когда есть варианты альтернативной обработки на стороне фронта. А текст ошибки. Что нахуй случилось? Как узнать? Хоть бы в логгер написали содержимое exc
>>2111979 Эксепшн отловлен, это штатная ошибка, если бы там всё пизданулось, то было бы 500 или что там ещё. Это разные сорта ошибок на разных уровнях.
>>2111895 Я просто челик с Большим Агрегатом, которого молодняк про себя зовет Big Daddy Не выпендривайся особо, а то очко-то твое не долго будет девственным
max_num = [matrix[j] for i in range(rows) for j in range(cols) if matrix[j] > max_num: max_num = matrix[j]]
Вот внутри него можно сделать вложенный цикл. Вот внутри него можно сделать условное выражение if. Но блин - нельзя внутрь списочного выражения засунуть то, что будет выполняться при срабатывании условия. Вот этот max_num = matrix[j] в конце выражения не сработает - это синтаксическая ошибка.
Как быть? Забить и использовать списочные выражения умеренно или есть какой-то хитрый трюк?
>>2112221 >нельзя внутрь списочного выражения засунуть то, что будет выполняться при срабатывании условия Можно? Его в начале надо писать. Я не большой знаток питона, но если объяснишь, что ты хочешь получить, я тебе компрехеншн напишу.
>>2112512 чел, я писал в одном из тредов, так и не ответили. у меня есть опыт по жабе, может стоит продолжать жабу ебать? Я просто дикий депрессняк с нее словил в силу того что там налепили кучу дублирующих стандартов и я в душе не ебу как все это учить и не проебать что-то на собеседовании, питон вроде гаромничнее в этом плане выглядит сейчас вот открыл лутца к примеру, дохуя воды, просто дохуище, но я 90% текста тупо пролистываю на опыте(и почти уверен что с фреймворками хуёрками тоже самое будет, ибо интуитивно понятно что к чему). Плюс еще жабускрипт знаю на уровне книжки кантора +- (естессно не на уровне нетривиальных задач уровня складывания нескладываемого, ибо уже забыл нюансы), могу в NPM, подргузить модули какие-нибудь оттуда, покопаться с ними через доки и написать какое-нибудь говно через импорты, реакт компоненты +- помню (до редакса так и не дошел), плюс верстку помню. Есть ли у меня шанс получить жоб оффер если я ща питон выучу, джангу и че там вокруг нее? Сократится ли время учитывая бэкграунд? Производственного опыта не имел, все вышеперечисленные - пет проекты, выдумывание в IDE каких-нибудь задач и т.п.
>>2112531 Хотел добавить, что жабу освоил почти на уровне создания полноценного API с авторизацией. Спринг (местный веб каркас типа джанго походу) + Гибернейт (местный ОРМ), ну и эскюэль знаю на уровне джоинов и подзапросов
>>2112545 ну и че мне никто не отвечает? я же вроде четко вопрос сформулировал. Есть ли смысл душить питон имея небольшой бэкграунд, будут ли шансы куда устроится или лучше продолжить ебать джаву?
>>2112575 >Ты бля чего хочешь то? программистом макакой устроится хоть куда-то. Джаву пока учил, накрыл депрессняк от количества ебаных стандартов. Одних только ОРМ интерпретаций с десяток в одном каркасе, пока учил один, второй забыл уже.
Анончики кто шарит в английский помогите новичку ..
Вообщем я делаю игру типа юзеру показывают слово и значение слова а он должен решить правильное ли значение ему показали и нажать 1 если правильно и 2 если неправильно с соответствующим выводом в конце ( Правильный ответ. Неправильный ответ) Подскажите что делать в случае если он ответит неправильно а ответ правильный . Типа он нажимает 1 но это неправильно и поэтому вывод должен быть как 2 понимаете о чем я ? Я че то не могу сообразить никак как это в виде кода представить
>>2113183 > def game Кого играть-то блять? > 10 строк кода функции в языке программирования высокого уровня, где написанный код должен сам себя объяснять. Хуйня переделывай.
Ребята, поясните как scrapy делает обычный запрос к странице. Заебался уже. Почему код scrapy.Request(url).xpath(...) у меня выводит ошибку, что мол у реквеста нет xpath. Но если обработчик передавать через другую функцию, и параметр callback, все работает. типа scrapy.Request(url, callback=parse) и уже в parse прописать xpath(...), то все работает. ЧТО за пиздец? Как сделать обычный запрос и обработать его? Почему нужно изъебываться и писать отдельно функцию обработчик?
>>2113279 т.е. это не баг а фитча? просто сделать я запрос не могу? нужно вот так вот все циклить, если мне нужно несколько разные страниц обрабатывать?
>>2113297 Альфач не может быть асинхронным. Альфач берет то что ему нужно, когда оно ему нужно, а не когда кто-то пообещал выполнить и случайно не наебал.
>>2113304 Альфач асинхронен потому что он ебет сразу десятки и сотни тянок разом, выполняет кучу тасок и усом не ведет, а омежкин ползает на карачках, постоянно блокируясь на I/O и лишь скулит в ответ
Гайз, зарегался на апворке, там действительно заказы которые мне подходят, итог - Я потратил все свои коннекты и больше не могу подавать заявку на заказ, почти из 20 заказов мне никто не написал, я офигел, все 20 человек тупо проигнорили, хотя я наверно был одним из первых кто ответил на их заказ, так-же у меня всего 7 долларов в час и низкие цены. Теперь что бы брать заказы мне походу нужно платить за коннекты, это шок конечно.
>>2113476 Не надо спамить на все проекты подряд, если будет низкий рейт по интервью-офферам то вообще словишь саспенд и пиздос. Надо хорошенько выбрать, вдумчиво написать писулю и ждать.
>>2113494 Потому что там таких хотельщиков мильйон, апворку интересны успешные проекты, где они поимеют профит, а не побольше полудиких индусов. >>2113496 Это тупая идея как для тебя, так и для таких ололо-посредников. В принципе, тебя можно кинуть после успешного выполнения, тогда норм.
>>2113551 Лол, вот да. Почему люди думают, что если они поставят цену ниже рынка, то сразу станут привлекательными?
Для заказчика это сигнал, что вот тут что-то не то, наверное качество донное. Вот ты идёшь в магазин, видишь там сосиски или пельмени по 100 рублей за кг. Не потому, что акция -75%, а просто цена такая. Очевидно, что ты такое покупать не будешь, ты сразу сделаешь вывод о качестве, даже не попробовав.
А с учётом, что рынок сложный, где масса некомпетентности, мошенничества, говнокода и т.п. это очень плохой сигнал.
Я кстати реально знаю случай, когда на работу не взяли чувака, который понравился на собеседовании и всё такое, но запросил слишком маленькую зарплату, половину от ожидаемого.
А вообще много тут успешный случаев было, чтобы на апворк вкатывались, особенно за последние пару лет? На питон или какие-нибудь похожие специальности?
>>2113583 >Вот ты идёшь в магазин, видишь там сосиски или пельмени по 100 рублей за кг. Не потому, что акция -75%, а просто цена такая. Очевидно, что ты такое покупать не будешь, ты сразу сделаешь вывод о качестве, даже не попробовав. А это часто делают для распродажи задержавшегося товара: кладут рядом еще дешевле. Умники думают что я буду брать фигню возьму подороже но качественнее.
>>2113583 >>2113618 Одно дело зарплаты на фулл-тайме и совсем другое хрюланс. Там есть совершенно разные заказчики. Есть жлобы, которые за копейку удавятся и там проекты по несколько баксов или дрочение индусов сотнями часов с рейтом в 2-3. Есть наоборт, которые заваливают тебя деньгами на ровном месте. Есть средняковые - сколько скажешь, столько и дадут. Но как-то стремно много просить, лол. Надо это искоренять в себе.
На фрилансе главное заявку к заказу расписывать. Сразу писать, что судя по всему у вас проблема с этим и этим, вот это я уже делал, а это представляю как сделать. И бонусом - у вас на сайте еще вот эта проблема, которой в заказе нет, но я могу тоже поправить.
>>2113583 но цены на сосиски не складываются с учетом зарплаты рабочих что их производят. там стоимость производства минимум в цене. а основном ингридиенты. и если например сосиски будут сделаны мажорами с зарплатой 300к в сек не значит что они будут пиздатыми.
>>2114385 Охуеть, по питону уже свитки делают. Манускрипты будут? >>2114411 нет на этот счет никаких тестов разве? не сайт а в смысле твой код потестить?
>>2114148 Еще mqtt можно поверх вебсокетов запускать, но вряд ли это будет чем-то лучше wamp. Если у тебя там простая задача, то можешь свой велосипед запилить. Посмотри паттерн pub/sub, это даст представление как этот самый велосипед должен выглядеть.
>>2114914 Задача предельно проста, получать поток данных и при необходимости добавлять/убирать каналы. Посмотрел websockets там вроде бы можно это делать через send, отправляя запрос. Буду ковыряться дальше
Не нашёл DS/ML треда, поэтому напишу тут, простите если мимо Сам быдлостудент и вкатываюсь в маш.об., и хотел поступить на курсы, чтобы научиться ему непосредственно, но отборочный на курс - собственно обучить модель, которая будет с помощью ввода данных из .csv файлов предсказывать что-то, а я пока что полный ноль и не понимаю с какими технологиями работать. Подскажите к каким фреймворкками/технологиям мне нужно обратиться и изучить
антоны, накидайте ТЗ на парсер (ваши старые заказы например). Хотелось бы поучиться на реальной задаче, чтоб понимать с чем придется работать параллельно набивая портфолио.
>>2115197 Я делал подобное на aiohttp, сообщения выглядели примерно: ['subscribe', 'topic_name'] - подписка. Аналогично отписка. ['event', 'topic_name', message] - отправка сообщения в канал. Если на сервер приходит запрос на подписку, то клиент(ссылка на вебсокет-соединение) просто добавляется в список подписки с соответствующим именем. Если на сервер приходит сообщение для канала, то просто цикл for client in topic_name: client.send(message). 30 строк говнокода и готово, но у меня было 1.5 клиента, поэтому я мог себе позволить.
Подскажите библиотеки для работы с сигналами. Суть такая, есть модуль, в который нельзя вносить изменения. Поэтому нужно повесить коллбек при перед вызовом метода внутри класса в этом модуле, ка сделать это?
Перекатываюсь с ларавела на джангу, и вот возникли вопросы:
1) Мне нужно прикрутить авторизацию и разбить пользователей на группы, начал делать по-старинке - клепать таблицы в бд, однако фак гласит о том, что авторизация прикручивается к уже существующей таблице по-умолчанию, насколько запарно прикручивать авторизацию к кастомной таблице пользователей?
2) Одна из таблиц бд должна иметь ключевое поле, которое принимает значение из таблицы пользователей, возможно ли прикрутить родную джанговскую таблицу пользователей к модели, чтобы брать из неё значение в качестве ключевого поля?
>>2116058 На авторизации много чего завязано, при этом так просто она не кастомизируется.
По идее самое правильное это создавать дополнительную таблицу со свойствами пользователя и делать связь один-к-одному со штатной таблицей. Для своих целей я так делал, это тривиально.
from django.contrib.auth.models import User class UserProfile(models.Model): ____user = models.OneToOneField(User, on_delete=models.CASCADE)
>>2116242 Спасибо, но я слишком поздно узнал о том, что весь основной поток данных о пользователях основывается на родной таблице, уже прокурил эту тему. Однако когда позвонил лиду и задал этот ебанутый вопрос, он там чуть не просрался с моей неосведомлённости...
Сап питоняч, нюфэг на связи. Вопрос насчет системы где какой-то скрипт крутится вечно, а снаружи ему поступают данные. Ну, например while True цикл который каждые 30 секунд будет пинговать IP-адреса и принтить аутпут. Как организовать подобную вещь? Ну вот что сразу в голову пришло, это что вместо самих объектов в цикле можно проходить по всем элеметам массива, сам цикл демонизировать и запускать как сервис, а вот как извне этот массив модифицировать: заполнять, удалять, очищать полностью или изменять уже существующий объект я пока не понимаю. Есть ли хорошие примеры для изучения?
>>2116695 У тебя классическая конкурентная задача, тут можно делать или через многопоточность, или через задачи в asyncio.
Управлять удобнее всего через веб интерфейс, если только не совсем примитив.
В случае asyncio, ты запускаешь задачу, которая что-то пингует. Другой задачей ты запускаешь aiohttp. Соответственно ты можешь зайти на веб интерфейс своего сервиса и поменять параметры какие-то, при этом, например, сохраняешь настройки в какую-то структуру.
А другая задача читает из этой структуры и уже определяет, как ей дальше работать, какие сайты пинговать и т.п.
Можно и через треды делать, тогда вместо aiohttp будет что-нибудь вроде Flask.
Какую библиотеку использовать для проверки того есть ли все поля в апи, правильно и тд? Для форм использовал wtforms, а тут, наверное, что-то другое надо
>>2117740 Запускать хеллоуворлд на питухоне из консолечки. Могу сверстать страничку на html + css + js, чтобы потом ее в какой-нибудь backend-фрейморк засунуть.
Ну и там основы немшк: БД, разделение функционала на mvc.
>>2117745 Начинать надо с Джанго, это единственный более-менее зрелый фреймворк.
И там в коробке почти все ключевые технологии для веб - url route, middleware, поддержка авторизации, шаблонизатор, ORM и довольно навороченная система моделей-миграций. Админка какая-то в комплекте. Очень зрелая документация по всем вещам.
Вот это для твоего стека.
Ещё есть асинхронное направление, но это не про твой стек и твои навыки. И всё равно для базы лучше джанго.
Давно строкоебством не занимался, подскажите, как мне избавиться от эскейпинга бэкслешей и нужно ли вообще избавляться. В текстовом файле есть вот такой, например, символ:
> /-\
Пистон считывает его и помещает в словарь как
> /-\\
Можно что-то сделать, кроме как помещать строку в r''?
Здорова, народ! Столкнулся с такой задачей на питоне, есть у меня таблица с данными - координаты х,у и значение "веса" на этой координате. Надо построить хитмап по этим данным. Юзаю матплотлиб, но в нем хитмап это какие-то ебучие квадратики. Нашел решение, как сделать красивое и гладкое изображение - gaussian_filter из scipy.
В чем вопрос собственно, как-то в этой хуйне можно сделать визуально границы перепадов "высоты"? Накорябал пикчу для понимания, что нужно допилить. Не могу никак нагуглить, как эти ебучие линии сделать.
Ну и еще можно меня мордой в тапки ткнуть, мб есть какой-то другой способ и\или библиотека для реализации подобной хуйни?
Как постить в джанго? У программиста на беке все работает. У меня ошибка мол MultyValueDirectKEyError и ниже пишет POST: no post data. Я не питонист и изменения в бек внести не могу. Фетчу мол body: JSON.stringify({field: "data"})
Есть интересная фигня: код в exception: text_error = traceback.format_exc(limit=None, chain=True) запускаем, всё работает потом делаем python3 -OO -m py_compile filename и ошибка UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe8 in position 5: invalid continuation byte Ос linux если это имеет какое-то значение
Всем привет, скажите пожалуйста. Хочу запилить свой форум с блекджеком и прочим на Django ( в учебных целях - руку набить и чтобы было что показать на всякий случай). Но есть проблема, я не очень люблю фронтенд, хотя какие то основные вещи html и css конечно же знаю. Так вот, я хочу чтобы к посту можно было добавлять комментарии и чтобы они сдвигались относительно друг друга лесенкой (это как минимум). В целом я понимаю как это можно сделать используя html, но я так понимаю по хорошему это все делается используя JS. И вообще, если надо ли мне вообще начать сейчас изучать JS для подобных вещей и может каких-то других?
>>2118929 > Так вот, я хочу чтобы к посту можно было добавлять комментарии и чтобы они сдвигались относительно друг друга лесенкой (это как минимум). В целом я понимаю как это можно сделать используя html, но я так понимаю по хорошему это все делается используя JS. Это форматирование делается только с помощью html+css, применять для этого js полный зашквар и колхоз.
>>2118929 Джанговский сервер-сайд рендеринг это ископаемая окаменелость. Если не можешь в изоморфный код, то забудь об этом. Отдавай бэком данные через рест, а рендер дома делай в браузере.
Делаю бота для изучения английского, может ли кто-то посоветовать тхт файл с кучей слов и переводом на русский?
Я воспользовался google translator + тхт файл с 400к слов, но там такая дичь, нужен годный контент, а его можно получить только с книги, хотелось бы взять тхт файл где слово и перевод.
двач, посоветуй что почитать о питоне на глубоком уровне, про GIL, механизм импорта и все такое. Хотелось бы почитать что-нибудь кроме документации, если такая возможность имеется
>>2120047 Если ты делаешь приложение и тебе не нужно, чтобы оно индексировалось поисковиками, было в выдаче, чтобы на страницы ссылались из других ресурсов и месседжеров - то нет профита.
Как же вы не понимаете, что технологии генерирования контента на самой странице появились уже в конце нулевых. Если за более, чем 10 лет, они не вытеснили традиционные, но значит так надо.
>>2120173 Поисковики не очень хорошо рендрят-индексируют контент, который динамически получен.
Потом ты задолбаешься делать сайт с поддержкой переходов по ссылкам, внутренними url и т.п, чтобы контент при этом генерился на клиенте. То есть это большая дополнительная возня ради ничего.
>>2120375 Надо очень внимательно следить за прогрессом поисковиков. Этим SEO-шники занимаются, но у них не принято знаниями делиться.
Поисковик находит какой-то url и вытягивает содержимое. В идеале там должна быть уже готовая веб-страница, он её распарсит и проиндексирует. Долгое время только так и было.
Если у тебя на странице JS код, который меняет контент, то этот контент оставался незамеченным для поисковика, он его тупо не исполнял, твои проблемы как говорится.
Поисковикам, впрочем, чтобы идти в ногу со временем, приходится подключать машины для рендринга. Во-первых, хочешь-не хочешь, а надо бороться с мошенниками, SEO-шниками и т.п скамом, они этими трюками пользуются. Во-вторых, слишком большую роль на рынке играют платформы вроде wix, где JS очень активно используется. И другие подобные решения.
Поэтому в каких-то случаях поисковики всё-таки индексируют наполненные на фронте страницы. Но там с ограничениями, тем более, что гарантии воспроизводимости в принципе нет.
Вообще использовать JS для отображения документов это очень дурной тон. Есть URL, есть документ по этому адресу. За вёрстку отвечает CSS, контент должен быть в самом html. А JS нужен для интерактивности.
>>2120403 >В идеале там должна быть уже готовая веб-страница, Чел, плять. Ты вообще понимаешь что такое веб? Ты понимаешь что такое запрос и как сервер отвечает на определенные запросы?
>>2120418 У тебя есть url. Ты делаешь запрос, получаешь страницу с результатом. Всё. Это должен быть уже готовый документ, размеченный, который способны распарсить и поисковики, и браузеры.
Аноны, скажите как лучше спроектировать парсер. Есть задача - 3 раза в день парсить определенный список страниц одного сайта и обновлять некоторую информацию с них в БД. Сейчас страниц около 5к, в будущем может быть до 100к. Если кабану нужно обновить информацию с какой-то конкретной страницы сайта, он может нажать в админке кнопку, и эта страница должна обновиться сразу же, а не дожидаясь своей очереди среди остальных 4999 (даже если парсинг уже идет). Также по запросу кабана может быть добавлена новая страница, которая также должна парситься в первую очередь. При этом api админки находится отдельно от краулера. Все это должно работать на asyncio. Сайт разрешает загружать масимум 5 страниц в секунду, иначе выдает капчу.
Я планирую сделать это так: 1. При старте скрипта запускаем вечный цикл, который 3 раза в день просыпается и загружает из БД список страниц для парсинга. 2. Засовываем их в очередь asyncio.LifoQueue (чтобы можно было в любой момент подкидывать в начало очереди страницы, которые кабан хочет обновить). 3. С помощью asyncio.create_task запускаю функцию, которая раз в несколько секунд будет проверять БД на наличие новых ссылок, и закидывать их в начало очереди. 4. После этого стартуем 2 функции-воркера, которые будут разгребать очередь и парсить страницы. Учитывая скорость загрузки сайта, как раз ~5 страниц в секунду. В будущем, если нужно будет быстрее парсить, подключу несколько прокси, и запущу по 2 воркера на каждую проксю.
Какие подводные? И еще вопрос - как обновлять уже существующие в БД страницы, по велению кабана? Если с новыми все понятно - у них столбец с последней датой парсинга в БД будет пустой, то обновлять как? Не хотелось бы подключать rabbitmq для этого.
>>2121148 > запускаю функцию, которая раз в несколько секунд будет проверять БД на наличие новых ссылок Не страдай хуйней, подними RabbitMQ. > Учитывая скорость загрузки сайта, как раз ~5 страниц в секунду. Заведи побольше воркеров и сделай человеческий throttling. > если нужно будет быстрее парсить, подключу несколько прокси Во-первых, это неэтично, а во-вторых, вас за такое забанят в пизду, как охуевших пидарасов. Если кабану надо быстрее, пускай идет договаривается с этим сайтом и платит им за доступ к базе. 100к страниц по 5 в секунду это около 6 часов, трижды в день успеешь обновить.
>>2121148 >Засовываем их в очередь asyncio.LifoQueue Для этого лучше asyncio.PriorityQueue
>>2121779 >Заведи побольше воркеров и сделай человеческий throttling. Плюсуюсь. Причём сделать просто руками, средствами asyncio, отдельная задача, которая будет брать задания из PriorityQueue, и отдавать их потребителям, тоже через очередь, но ограниченной длины, не чаще 5 раз в секунду.
output_queue= asyncio.Queue(5) # не больше 5 элементов в очереди while True: ____data = await input_priority_queue.get() ____await output_queue.put(data) ____await asyncio.sleep(0.2)
>>2121897 ___data = await input_priority_queue.get() fix, тут надо _priority, data = await .... потому что приоритет тоже возвращается, но потом его тупо можно игнорировать
Как нормально проверить что файл существует, если нет, то его надо создать, если существует — нужно прочитать и проверить на то что там лежит JSON, чтобы забрать в dict. Я написал вот так https://pastebin.com/hCZqqmvD, но можно ли обойтись без try catch внутри try catch?
>>2121897 > output_queue= asyncio.Queue(5) # не больше 5 элементов в очереди А зачем ограничивать очередь, если туда и так будет ложиться не более 5 элементов в секунду?
>>2122210 Понял. В случае если какая-то страница будет грузится долго, чтобы в очередь не набилась куча страниц, которые потом разом спарсятся и спровоцируют капчу.
короче было if " текст1 " in response.text: а я сделал что бы нескольо искало if "текст1 in response.text or "текс2" in response.text or "текст3" in response.text or "текст4" in response.text or "текст5" in response.text or "текст6" in response.text:
и теперь часть работает, а часть мне пишет in <string>' requires string as left operand, not int Текст у меня все цифры. Причем 1111 и 1 это должно восприниматься разные. Погуглил, ставил ' ' вместо " " и ничего .
Что делать? Я не прогоамист вооьще
Да, мне вощрашет текст с цифрами и у меня цифры одни. Я пробовал ввводить со словами , ведь перед каждым набором цифр в ответе есть одно и тоже слово но все равно так. Не понимаю пчему оно одни цыфры видит нормально в ответе, а на другие материся
Сап двач тян - аналитик на связи Дали ваш питон идиотски Нужно было считать с сайта таблицу и потом ее сохранить в формате скл и ещё таблицу эту «перевернуть» Вообщем с 1 и 2 заданием я справилась, как и в каком месте перевернуть таблицу - без понятия Было бы здорово если бы всякие няши мальчики смогли бы помочь! Если что тг @kitityty Ламповое общение при помощи гарантирую!
Anonymous, есть тут такие, кто может рассказать про gunicorn и Flask? Когда я пишу gunicorn main:app что он делает? В main.py одна строчка from server import app.
setup.py устанавливает две entry point, код которых лежит в mymodule.py. В самом mymodule.py реализован класс, который для инициализации принимает KEY-файл. Так вот, как мне указать путь до ебаного KEY-файла, чтобы во время вызова этих entry points не ломалось ничего?
Когда ты пишешь gunicorn main:app запускается гуникорн, он импортирует файл main.py. Дальше, когда приходит запрос от пользователя, гуникор запускает функцию-генератор app и передаёт ей параметры твоего запроса и коллбэк.
Ты делаешь какую-то логику, через коллбэк устанавливаешь заголовки вроде кода возврата, куки, content-type и т.п., а через yeild возвращаешь тело запроса, можно в несколько частей, ибо генератор.
В общем всё просто. gunicorn - это вебсервер. WSGI - протокол для запуска питон-приложения.
Советую запустить гуникорн и минимальные приложения без фласка, быстро разберёшься что к чему.
>>2122522 Надо запускать, плохо в сетапах понимаю.
По идее, ты можешь вычислить путь через какой-нибудь pathlib, обычно так делают, что-то вроде pathlib.Path(__file__).parent.resolve(), дальше добавить путь к файлу.
>>2122329 Стоило идти на аналитика чтобы все равно торговать еьалом и приятным общением? Не проще ли сразу пойти в маркетинг и не врать себе? Ну если быть шкурой это твой выбор, так будь же собой до конца!
>>2122575 >>>2122575 >Стоило идти на аналитика чтобы все равно торговать еьалом и приятным общением? Не проще ли сразу пойти в маркетинг и не врать себе? Ну если быть шкурой это твой выбор, так будь же собой до конца! >
>>2122929 На шкуру обиделась что ли? Но ведь это чистая правда - заигрывания и все такое ради получения выгоды - все это и является шкурностью. Ты думаешь что прекрасно понимаешь жизнь, что все мужики тупые и их легко поиметь. Вот это поиметь и есть позиция шкуры. Мужики такими тоже часто бывают, но чуть-чуть реже. Да ладно, чё ты душная такая мы все здесь твои друзья.. чмоки крошечка, надеюсь я тебе помог.
Подскажите, если джуновских вакансий в своём городе особо нет, то надо не выёбываться и идти учить php? Бэкенд вакансий с одной стороны поровну, с другой стороны на питоне почти все миддл-синьёры, а на пыхе что-то есть. В таком случае удалёнка из ДС-ДС2 реальный вариант или господину из приусадебного хозяйства не стоит даже надеяться?
Суп анонче, подскажите нубасу, как подступиться к задаче. Есть ксвшка с кучей строк и колонок (1.5кк на 70 если быть точным). В полях записана самая разная информация, и мне нужно переписать в текстовый файлик данные из одного поля - но только в том случае, если другие поля этой строки содержат определенные фильтровочные данные.
Я не придумал нчиего лучше как сперва взять и заджоинить поля всех строчек в одну стрингу, затем пробежаться по этим строчкам регулярками, и если там есть фильтровочные данные, то записать эти строки в промежуточную ксв - так я получу отфильтрованные от мусора данные. Потом открыть эту ксв и уже забрать данные из нужной мне колонки, чтобы не ебаться с вырезанием этих данных построчно через регулярки.
>>2123856 Зачем? Или ты тупо хочешь искать регуляркой во всей строке? Ну тогда читаешь построчно как текст, если есть матч, то передаешь уже парсеру цсв и извлекаешь значения.
>>2121148 Парсер запилил, только без его запуска 3 раза в день и пока без RabbitMQ. Как это лучше запускать несколько раз в день - запускать скрипт кроном или как-то внутри скрипта засыпать на 8 часов между загрузкой страниц? Хотелось бы сделать все в коде, но пока не понятно как именно.
Помогите разобраться с nginx, uvicorn и Fastapi. Мне нужно получить файл с диска в приложение фастапи и вернуть его в ответе пользователю. Стоит ли это делать через энджиникс и как это будет происходить?
Ещё буду рад если посоветуете что почитать по деплою приложений на реальный сервак.
Смотрите, есть у меня какой-то объект, который нужен в нескольких функциях, там, реквестс или подключение дб. Очевидно, можно в глобальном скоупе их создать и пользоваться, но ровные пасаны делают if __main__ main() и не засирают его. Остается или завернуть в ооп или пробрасывать его в все функции через параметры, что несколько тупо. Может ещё какой-то способ годный есть?
Как сделать, чтобы типа имея создание объекта в одном файле, потом импортировать другой, где он используется, но не создается и использовать в этом же? Конечно один файл было бы попроще, но все же