Это копия, сохраненная 15 мая 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Предыдущий: >>1931851 (OP)
Литература:
https://ln2.sync.com/dl/cf2c1d070#xq4s328t-xbbjys2z-9r6j7ss7-gf4e9dv6 <-- Книжки, новое собрание
Ещё книжки: https://yadi.sk/d/HQhhsBsq3TVRUq
Тоже книжки: https://yadi.sk/d/tArKKuQu3Kejuq
Больше книжек: https://yadi.sk/d/H-00n-UG3RSQem
Анон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы:
https://ideone.com/ - возможность постить листинги кода и онлайн-запуска, не требует регистрации
https://dumpz.org/ - можно постить листинги, не требует регистрации
https://pastebin.com/ - для листингов, регистрация не обязательна
https://www.codepile.net/ - можно расшарить код в том числе на редактирование, особая полезная опция - чат при каждом листинге, где можно код обсудить
https://pyfiddle.io/ - запуск python кода онлайн, но чтобы шарить, надо регистрироваться
#######################################
ЧаВо: https://github.com/TheKnightsWhoSayNi/info/wiki/Hat Актуальность примерно 2015 года
Вопросы-ответы:
— А стоит ли читать Лутца, том номер N?
Мнения в треде разделены. Кто-то за (очень неплохая база даётся), кто-то против (слишком много воды и объём книг убивает всё рвение). В общем — решать тебе, книга вредна не будет, но ты можешь её просто не дочитать и забросить.
— Стоит ли читать %книга_нейм%, если там питон версии 2.х?
Нет, не стоит. 100% есть более актуальная книга, для пистона 3.х
— А что ещё можно читать?
Питон сам по себе очень хорошо задокументирован и для уровня начинающих, и для продвинутого. Смотри официальную документацию. Можно начать вот с этого https://docs.python.org/3/tutorial/introduction.html
— Есть у кого на примете годный курс лекций по алгоритмам? Формат лекций мне как-то ближе, нежели просто чтение книги.
МФТИшный курс, например, https://www.youtube.com/playlist?list=PLRDzFCPr95fK7tr47883DFUbm4GeOjjc0
— Что можно почитать/посмотреть по многопоточности/параллелизации в питоне, да и вообще в целом?
Очень годный ролик на американском языке про многопоточность и асинхронность https://www.youtube.com/watch?v=MCs5OvhV9S4
— А как учить джангу? Нахожу только книги по джанге 1.х
У джанги отличные доки (одни из лучших для пистоновских либ, имхо), почитай их для начала. Книгу по джанге можно читать и для версий <2, это не проблема, т.к. принципы остаются теми же. Для переката на 2.х хватит changelog`a или тех же самых доков/статей. Начни изучать с разбора учебного приложения с голосовалкой из официальной документации.
— В ньюфаг-треде написано, что нужно начинать с SICP, чтобы научиться программировать
Вот, пожалуйста, та же самая программа, но переработанная под язык Python: http://composingprograms.com/ (нужно знать ангельский или уметь пользоваться переводчиком)
— Можно ли на питоне делать мобильные приложения?
Да, смотри на фреймворк Kivy https://en.wikipedia.org/wiki/Kivy_(framework) https://kivy.readthedocs.io но народ на него жалуется
— Как можно без лишней возни ускорить программу на питоне
1) проверь сначала свой код, алгоритмы и структуры данных. Чаще проблема здесь.
2) код можно иногда феерично ускорить, используя JIT (Just-in-Time) компиляцию. Почитай обязательно про модуль numba, он ставится через pip, и альтернативный интерпретатор PyPy.
— Дайте нормальные книжки на русском! Мы, блядь, не в пиндосии живём
Брат, смотри книжки по ссылкам в шапке, там есть и русские. Но помни, без языка ангелов твоя жизнь проходит мимо и ты обречён быть на обочине знаний и технологий.
ps: анон, если ты вносишь изменения в шапку, оставляй ссылку на код с обновлённым исходником.
исходник: https://dumpz.org/bASGKD8cCFDf
> Но как же мне тогда крутить свою бесконечную(круговую) очередь и подкидывать в нее новые задачи?
Во-первых замечания по стилю. Делать вот это
loop: asyncio.AbstractEventLoop = None
передавать loop в функции не надо. Это устаревший стиль, актуальный для питона 3.5, которые сейчас считается obsolete и активно выпиливается. Там была особая магия с тем, что можно пересоздавать циклы обработки сообщений, и куча проблем из-за этого. Это можно забыть, как страшный сон, и просто делать
self.loop = asyncio.get_event_loop()
или
self.loop = asyncio.get_running_loop()
У тебя код завязан на специфику 3.7 (contextvars, typing), поэтому можешь и функции для asyncio оттуда использовать смело.
Я не вникал особо в твой код, но там есть вот такое вот:
62: self.loop.run_until_complete(self.consume_queue())
это синхронный вызов, он завершится только тогда, когда завершится цикл в consume_queue, то есть судя по всему никогда, если только какого-нибудь исключения не будет.
Логика асинхронного программирования схожа с логикой многопоточного.
В многопоточном у тебя есть треды, которые время от времени переключаются. В asyncio аналог треда это задача, Task. У тебя скедулер в asyncio держит задачи и переключает с одной на другую, получается, что несколько задач работает одновременно. В то время как внутри задачи всё последовательно идёт, операция за операцией.
Соответственно, идея такая. Ты свой планировщик оформляешь как независимую задачу (сервис).
Как вариант, создаёшь объект
my_scheduler = TaskScheduler()
и запускаешь его как задачу
scheduler_task = asyncio.create_task(my_scheduler.consume_queue())
Потом в других задачах ты можешь делать
await my_scheduler._queue.put()
или синхронным вызовом
my_scheduler._queue.put_nowait()
Таким образом твой планировщик работает где-то в фоне и выполняет какую-то работу, а общаешься ты с ним через очереди.
> Но как же мне тогда крутить свою бесконечную(круговую) очередь и подкидывать в нее новые задачи?
Во-первых замечания по стилю. Делать вот это
loop: asyncio.AbstractEventLoop = None
передавать loop в функции не надо. Это устаревший стиль, актуальный для питона 3.5, которые сейчас считается obsolete и активно выпиливается. Там была особая магия с тем, что можно пересоздавать циклы обработки сообщений, и куча проблем из-за этого. Это можно забыть, как страшный сон, и просто делать
self.loop = asyncio.get_event_loop()
или
self.loop = asyncio.get_running_loop()
У тебя код завязан на специфику 3.7 (contextvars, typing), поэтому можешь и функции для asyncio оттуда использовать смело.
Я не вникал особо в твой код, но там есть вот такое вот:
62: self.loop.run_until_complete(self.consume_queue())
это синхронный вызов, он завершится только тогда, когда завершится цикл в consume_queue, то есть судя по всему никогда, если только какого-нибудь исключения не будет.
Логика асинхронного программирования схожа с логикой многопоточного.
В многопоточном у тебя есть треды, которые время от времени переключаются. В asyncio аналог треда это задача, Task. У тебя скедулер в asyncio держит задачи и переключает с одной на другую, получается, что несколько задач работает одновременно. В то время как внутри задачи всё последовательно идёт, операция за операцией.
Соответственно, идея такая. Ты свой планировщик оформляешь как независимую задачу (сервис).
Как вариант, создаёшь объект
my_scheduler = TaskScheduler()
и запускаешь его как задачу
scheduler_task = asyncio.create_task(my_scheduler.consume_queue())
Потом в других задачах ты можешь делать
await my_scheduler._queue.put()
или синхронным вызовом
my_scheduler._queue.put_nowait()
Таким образом твой планировщик работает где-то в фоне и выполняет какую-то работу, а общаешься ты с ним через очереди.
>Соответственно, идея такая. Ты свой планировщик оформляешь как независимую задачу
Удивительно, я перечитывал предыдущие ответы и внезапно сам допер до этого. Очевидное решение, над которым я ломал голову несколько часов.
Тысяча благодарностей за помощь! Без тебя и других анонов тупил бы и дальше.
Что вообще можно написать такого эдакого, чтобы не стыдно было потлм показать на собеседовании?
rest api с крудом. Какой-нибудь условный интернет магазин
mypy же есть. Если так горит, можешь настроить тайпчекинг в качестве дополнительного линтера.
> Ты сейчас описал применение любой статической системы типов.
В каком плане? Я имел в виду, что typing в моем понимании - просто библиотека для отписки, чтобы условно была. Если нет внешнего кода, который потом типы сопоставляет (хоть та же IDE, хотя она обычно с этим не очень справляется) и проверяет, какой толк от нотации и type-хинтинга в принципе, если ты сам потом все проверяешь по итогу?
Вопрос такой:
Как заставить Джанго форматировать html перед отправкой клиенту? Чтобы не было такой параши с огромными разрывами как в пэйджсурсе пикрил.
Ты еще до темплейтов не дочитал руководство? https://docs.djangoproject.com/en/3.1/ref/templates/language/
>>>>43403
Давно уже дочитал и многое уже прочитал, но про то как уже отрендереную страничку автоматически выправить по кодстайлу, перед отправкой клиенту - там нет.
>Ждет ли питон строго-типизированная судьба JS'a в виде подобия TS?
Это разные вещи всё-таки, TS это мета-язык, компилируемый в JS, а typing это сам питон.
Есть инструменты для проверки в runtime, технически это возможно. Просто перерасход ресурсов.
Не нужно, тайпхинтинг порешал все проблемсы. Прверять типы должен разраб при разработке а не машина при выполнении.
А зачем перегружать код и нагружать сервер? Почему руками да даже не руками, в том же вскоде есть встроенная функция это не сделать?
Глянь на пакет mypy. Он делает статическую проверку кода на соответствие типов. То есть проверка автоматизирована.
Твои рассуждения опоздали, надо было в начале десятых об этом писать. Когда придумали аннотации типов, но никакой дополнительно поддержки, кроме как самой аннотации, не было.
Используй шаблоны jinja2, они лучше джанговских по-умолчанию и более универсальны.
Там ты можешь делать теги вида
{%- tagname -%}, где тире означает, что нужно вырезать все лишние пробелы перед или после тега.
Именно форматирование нужно? А зачем?
Не думаю, что это как-то сильно нагрузит сервер, например тот же ВСКод делает это за доли секунды по щелчку мыши.
Вот бы так делал рендерер Джанги автоматически...
Спасиб, я это не знал, ну тогда и Джанга к хую не впилась можно всё на Фляге сделать.
Имеется ввиду форматирование по код-стайлу , чтобы сурсы загруженых страничек было удобно читать.
>>43425
>Не думаю, что это как-то сильно нагрузит сервер, например тот же ВСКод делает это за доли секунды по щелчку мыши.
Если у тебя сервер обслуживает 10 пользователей, то нагрузит не сильно. А если много?
Можно сделать какой-нибудь декоратор, который будет форматировать html на базе известных пакетов, вроде lxml. Но реально, зачем?
Это время на форматирование и дополнительный трафик. Зачем тебе читать итоговый html? Тем более, что есть инструменты, чтобы потом в браузере код в форматированном виде посмотреть, если очень потребуется.
Наверное можно было бы сами шаблоны отформатировать так, чтобы на выходе был уже форматированный код, в том числе все эти отступы.
>Спасиб, я это не знал, ну тогда и Джанга к хую не впилась можно всё на Фляге сделать.
Возможно это и Джанго умеет. Вообще поменять шаблонизатор просто, а для тебя по итогу всё прозрачно будет, вместо шаблонизатора от Джанго будет работать jinja2.
Jinja2 лучше и мощнее. И эти шаблоны ты можешь потом в других серверах использовать, даже не питоновских, вроде nunjucks.
И если там чуть неровно, то ты уже в обморок упадешь?
К тому же можно смотреть в инспекторе, он тоже форматирует.
> Это время на форматирование и дополнительный трафик. Зачем тебе читать итоговый html? Тем более, что есть инструменты, чтобы потом в браузере код в форматированном виде посмотреть, если очень потребуется.
А вот это - золотая мысль, спасибо.
Проблемы шерифа индейцев не волнуют - проблемы читаря кода не должны волновать сервер.
а то я заебался sql дрочить и не понимать зачем он нужен
Да, мне уже подсказали про инспектор, спасибо!!!
Вот тебе проект - парсишь каталог с шлюхами и забиваешь в дб, потом сделай форму по их поиску по разным критериям с сортировками и прочим.
я скорее имел ввиду "почитать", чем "запилить"
запилить я и хуево могу
а мне почитать бы как надо делать
SQLAlchemy. Прочитай доккументы Алхимии на их сайте - сразу таким образом и SQL изучишь и узнаешь что такое ORM.
а всякие монго, рэдис? это все что за звери?
Как делать. Про нормализацию бд знаешь? Вот.
Дальше можно работать ручками через prepared statements или через orm, второе предпологает ещё дрочение ооп.
В принципе, берешь любую книгу по джанге, там применяют орм.
Второй раз уже сталкиваюсь с разницей в функционировании моей говнопрограммы на локалхосте и на ПайтонЭнивеар. На этот раз почему-то мускул отказывается заполнять поля. Вроде все проверил: и миграцию сделал, и апгрейднул, и код заполняет базу данных на моей машине, а воз и ныне там. И где ошибка никак не пойму. Подскажи, бро, куда глядеть?
Нужно запилить ПАТЧ метод из имеющегося РОSTа. Спасибо!
flask, flask_sqlalchemy быстро апдейт
https://stackoverflow.com/questions/37619848/python-loop-list-index-out-of-range
https://qna.habr.com/q/379556
НО Я НЕ ПОНИМАЮ, ГДЕ ПОСЛЕДНЯЯ ИТЕРАЦИЯ? Задача состоит в том, что, нужно римские цифры перевести в арабские, я заебался с этим list index out of range. Изначально, я додумался до len(arr) - 1, но ведь в таком случае проебывается последняя итерация цикла. Возможно я что - то упускаю или не понимаю, я заебался.
https://ideone.com/Osin07
Вот примеры вызова функции:
from_roman_numeral("V")
from_roman_numeral("XX")
from_roman_numeral("DCCC")
from_roman_numeral("MMMM")
То есть, вместо, MMMM, который должен быть равен 4000, мы получаем 3000, и так далее.
> for i in range(0, len(arr) - 1):
Вот здесь ты пропускаешь последнюю букву. Там с индексами внутри цикла какая-то каша
> arr >= arr[i + 1]
строки сравниваются со строками
> if arr in roman
часть символов для чего-то пропускается
Выглядит как будто нейронку посадили фиксить экзепшены просто чтобы не было экзепшенов, неважно корректная ли программа будет в итоге.
Гугли awesome interview questions.
Сука, про нейронку обидно было.
Я немного не тот код скинул, но суть та же
https://ideone.com/n2ggzq
Я понимаю, что for i in range(0, len(arr) - 1): тут я пропускаю последнюю букву, то есть, итерацию, но если этого не сделать вылазит ошибка "list index out of range". Что с индексами внутри цикла не так? Я сравниваю один элемент списка arr и другой arr[i + 1], почему каша?
>строки сравниваются со строками. так и должно быть, ебанные римляне придумали, что если меньшая цифра стоит перед большей, то нужно вычитать, а не я.
Вот условие задачи, если что
https://www.hackinscience.org/exercises/reverse-roman-numerals
> если этого не сделать вылазит ошибка "list index out of range"
Ну и что же теперь, отбрасывать последний символ? Убери бесполезные ифы и вставь недостающий, чтобы если символ последний, его всегда прибавляем, и не проверяем что там за ним.
> ебанные римляне придумали, что если меньшая цифра стоит перед большей
Ещё раз, ты сравниваешь строки, а не числа. Там X больше чем L например, 10 больше 50, тупо дальше по алфавиту стоит.
ок, спасибо.
>Ещё раз, ты сравниваешь строки, а не числа. Там X больше чем L например, 10 больше 50, тупо дальше по алфавиту стоит.
тут да, совсем обосрался.
>Анон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы:
https://ideone.com/ - возможность постить листинги кода и онлайн-запуска, не требует регистрации
https://dumpz.org/ - можно постить листинги, не требует регистрации
https://pastebin.com/ - для листингов, регистрация не обязательна
https://www.codepile.net/ - можно расшарить код в том числе на редактирование, особая полезная опция - чат при каждом листинге, где можно код обсудить
https://pyfiddle.io/ - запуск python кода онлайн, но чтобы шарить, надо регистрироваться
P, Q - списки либо множества, скобки меняй в первую очередь, остальное не смотрел, сет не используй, лучше списки
Я искал.
Полторы либы для пинга и 0,5 для трейсроута. При том, что возможности нормально обрабатывать их содержимое нет. Грубо говоря, запускаешь из питона пинг, а он выводит его в консоль, а не возвращает через return
Ну если ты в гугле пишешь "библиотека питон трейсроуты", то конечно не найдёшь ничего
PyPing, aio-ping навскидку.
Вот тебе traceroute https://jvns.ca/blog/2013/10/31/day-20-scapy-and-traceroute/
Да, поэтому требую помощь, помогай!
Я понял что питон говно, вкатываюсь в автохоткей, вот он то может вывести на экран.
Ты идиот? aio-ping использовал прекрасно в продакшен коде. Нахуй пошел 1С ник
ну вот так и формулируй свои вопрос:
опробовал то-то.
проблемы такие-то.
посоветуйте еще что-то
А то просто хочется обоссать.
Прилагается виртуалка с сетью хостов для практики.
Что лучше, литкод или кодварс?
хуй поймешь программистов, там особый путь
он и правда охуел
> • An overview of the "asyncio" framework that comes with Python 3.4.
Книжку сдать в музей исторической литературы
Заходишь на https://docs.python.org/3/search.html?q=asyncio&check_keywords=yes&area=default и смотришь какие методы стали deprecated. Сложно?
>Как будто там не то же самое происходит.
Более-менее на современный asyncio стал похожим с версии 3.5. В 3.4 легаси дико лютое, и при этом не совместимое с современном питоном, примеры оттуда просто не заработают в современном питоне, там вообще общего мало.
Вообще именно сетевые возможности с asyncio в первую очередь старый питон он современного отличают. И типизация.
Другие вещи можно и по старым книжкам учить, а вот для этих важно, чтобы современные были.
>и смотришь какие методы стали deprecated. Сложно?
Нет. Ответ простой, для asyncio из 3.4 ВСЕ методы. Вообще все.
Я про то, что протоколы всё те же, то что какие-то либы их используют неблокирующе это другое дело.
Ссаный фтп происходит с каких-то 70-х годов и всё ещё в ходу.
Протоколы протоколами, но принципы построение программ разительно поменялись
Это как сравнивать жопаскрипт из 2012 с es7+
У меня ничего не поменялось, я не пишу любой сетевой код асинхронным.
Иногда это имеет смысл, да. Но в целом это просто очередной тренд, как было с носкл, где вся эта хуйня теперь? Заняла свои небольшие ниши, где она имеет превосходство.
жс это вообще вечная история борьбы с изначально заложенными анальными ограничениями, а все долбоебы вокруг повторяют.
>как было с носкл, где вся эта хуйня теперь
Везде, братюнь. Redis, Memcached, Clickhouse, Mongo используются корпоратами.
короче по работе надо было пересесть с шарпа на питон
и пересел
клевый язык, конечно - базару ноль
но из-за того, что не все вещи делаю питоник-вэй - код получается страшным (еще бы, я ведь пишу на питоне как на шарпе)
короче, если кратко: где бы глянуть хорошо написанные питон проекты? Посмотреть где и как лучше написать
>Но в целом это просто очередной тренд,
Это не просто тренд.
Если ты пишешь серверную часть, то у тебя опции или использовать треды, или извращаться с селектами, или asyncio (или его предшественники - стрононние решения). Селекты это совсем извращение, остаётся только два варианта, треды и асинкио.
Треды в питоне не очень, возни много, граблей много, эффективность никакая.
Ну да, есть ещё опция делать решения запрос-ответ, но это не совсем сетевой софт.
При этом я думаю что и в других местах по сетевой части много с 3.4-2014 поменялось, просто чуть менее очевидно.
Функция для парсинга URL и последующего составления sitemap.
Можешь тут посмотреть, только надо быть внимательным, если список называется "охуенные питон приложения", есть такая вероятность, что приложения могут оказаться охуенными с точки зрения пользователя, но не с точки зрения исходного кода, конечно, в большинстве случаев там и код на высоком уровне, но надо быть начеку
https://github.com/vinta/awesome-python
https://github.com/mahmoud/awesome-python-applications
https://python.libhunt.com/
спасибо)
а еще вопрос
нормально ли, что во многих проектах (в тех, что я видел) нет main функции как таковой?
типа фигачить тело в def main() а потом
if __name__ == "__main__":
___main()
это мовитон?
Syntax sugar
У тебя некомпилируемый язык и нет требований по точкам входа.
if __name__... Используется когда модуль запускаешь (а он тянет с собой все из __init__.py) через python -m. Если просто скрипт то объявлять не надо. Модуль всяко удобнее. С областями видимости и path ещё наебешься, придется .env клепать
bash
GOвно какое нибудь под микросервисы
вопрос от другого анона.
в одном файле можно описать класс или набор функций и импортировать в другой файл без указания местонахождения? и для чего нужен __init__.py? чаще всего он вообще пустой. что там можно прописать?
Почему функция any() будто делает next(x)
Зачем такое поведение?
Почему функция any() будто делает next(x)
Зачем такое поведение?
>Про монгу в сириус бизнесе я не слышал
кек щито?
>Кликхаус это какая-то местечковая хуйня
Топовая колоночная база, ты ебобо?
Потому что (внезапно) чтобы понять что там, то по объекту надо проитерироваться
Итераторы и итерируемые объекты зашиты в подкорку питону, один из основных паттернов
ну пеп это ведь правила
а мне интересно именно прикладные вещи
типа
for el in elements:
___f(el)
или
a = list(map(f, elements))
я слышал, что питонисты стараются экономить строки вот оакими записями - это прям везде так принято?
>это прям везде так принято
Везде принято писать так, что было понятно
"Complex is better than complicated"
Прочитай "Zen of Python", если у тебя такие вопросы. Где-то наверняка и на русском есть.
x = [{'a': 1, 'b': 2, 'c': 3}, {'a': 1, 'b': 14, 'c': 8}, {'a': 2, 'b': 42, 'c': 1}, ...]
|
y = {1: [{'b': 2, 'c': 3},{'b': 14, 'c': 8}], 2: {'b': 42, 'c': 1}, }
a = b
Алсо например в тз написано что нужно фильтровать список и поиск делать, где в этом случае разделение на бек и фронт, что каждая часть должна выполнять
>где в этом случае разделение на бек и фронт
Есть разные подходы - называют толстый и тонкий сервер. Когда на фронте современный фреймворк типа vue / angular / react, то от бэкенда по сути требуется только апи и больше ничего. Но бывает и наоборот - шаблонизатор используется бэкендовский, формы, таблички и пр. всё на фрейморке бэкендовском (у джанги это есть), а на фронтенде сидит обычный верстальщик.
Тз составлял не прогер, там просто сказано что нужно на джанго, но нужен бек, чтобы прикрутить потом фронт и при этом должны быть чекбоксы и формы, вот думаю теперь что на себя брать, а от чего открещиваться, спасибо
иногда пишут
try:
___import a
except:
___import b
втф? в каких случаях мы не гарандирует импорт?
ни разу не видел, но с импортами же есть ебля, например релятив импорт один заставляет ебаться, когда запускаем сам файл, а не ипортим его
видел много раз
модуля "а" может сгенерить исключение внутри себя типа "какие то условия не выполнены на данной системе, что то там не найдено" и будет потому подключен fallback "b"
почему так нахуй? во всех этих статейках поверхностное объяснение. мол, он очень простой и потому пиздатый. ну да ну да. а если серьезно? в чем профит?
> мол, он очень простой и потому пиздатый. ну да ну да. а если серьезно? в чем профит?
С тобой все там окей? Сам ответил на свой вопрос, забил на ответ и спросил вопрос снова.
это ответ на первой страницы гугла, мне такой не нрав))
Дай блохира. Решаю пока задачки на петоне, интересно посмотреть. У меня на базовом питоне проблем обычно не возникает.
>втф? в каких случаях мы не гарандирует импорт?
Если ты используешь нестандартные модули вместо стандартных.
Ещё такая магия использовалась для совместимости v2 vs v3, потому что там многие стандартные модули переименовывали.
Но вообще надо смотреть на конкретные случаи, а не гадать.
Логику, если модуль запускаешь. Например ссылку на классы или готовые объекты из других файлов в этой директории
А какой сейчас самый православный способ спарсить json в типизированные объекты?
Вроде, удобнее всего определить DTOшки как @dataclass и потом спарсить их с помощью вот этой либы? https://github.com/lidatong/dataclasses-json
Или есть способ лучше?
в питоне есть типизированные объекты? охуеть, не знал.
Хочу в веб-интерфейсике писать произвольный кодик, а в основном приложении просто получать dataframe . И чтобы все в докере и по сеточке оптимально упаковывалось.
Пацаны, я шапку изучил. Но литературы просто дохуя и она старая, хотя в шапке также написано, что надо читать литературу по актуальной версии питона.
Для нубаса с какой книги начать? Мне 32, перекатываюсь из другой профессии. В школе нравился паскаль — вот и все мои забытые знания.
Спасибо.
Допетрил сам, запускаю второй луп в отдельном тредике, вроде работает, теперь надо понять как в запущеный луп новые обработчики закидывать
короче вопрос
есть ли у вас прям промышленный пример (или просто годный), где использовались бы arg, kwarg аргументы?
а то игрушешные примеры ок, а нормальных я не видел
вот в питоне аннотирование методов в классе это просто пиздец какой-то
хочешь спокойно ебнуть что-то типа
class A:
...
__def hui(a : A) -> A:
____return pizda(A)
А НИХУЯ ТЫ ТАК НЕ МОЖЕШЬ - АНРЕЗОЛВД РЕФЕРЕН
пиздец горит
спиню кьюти луп в айдле uv-лупа и тредик реагирует на сигналы, кайфец
idle = pyuv.Idle(loop)
idle.start(lambda handle: QtWidgets.QApplication.instance().processEvents())
питон ван лав
Любая функция с регуляр экспрешн. Вообще это типа соглашения такого по оформлению кода.
Где нужно произвольное количество аргументов или дохуя опциональных. Тот же sum искаробочный, тот же print искаробочный.
Вот из сторонней либы, например. https://requests.readthedocs.io/en/latest/api/
а что блять не так?
я студентота с опытом работы в концернах залупки
скоро предстоит менять работу на более серьезную (потому что в концернах залупки нужно быть и чтецом и жнецом и на дуде еблецом)
и в целом, на прошлом месте я неплохо прокачался в прогании
Но тк у меня немного не прогерское образование, я абсолютно не ебу в теорию алгоритмов - а ее поднимать надо, да
отсюда вопрос, дорогие аноны, как лучше вкатываться в алгоритмы? Спрашиваю в этом треде тк сам питонист
Стоит ли смотреть курсы? или лучше сразу идти в литкод? а поможет ли вообще литкод? или лучше задрочить кормена и прочую хуйню?
выручай двач)
Что ты собираешься делать на литкоде, если ты нихуя не знаешь? Сначала дрочи теорию, потом увидишь применения.
Берешь классические книги и читаешь.
Что не так? Объект создаётся, методы через интерфейс прокидываешь
пиздец конечно название ебанутое
У тебя все заработает, если напишешь в начале файла from __future__ import annotations
Это активирует фичи из вот этого пепа https://www.python.org/dev/peps/pep-0563/
Если верить расписанию, это поведение станет дефолтным в версии пиона 3.10, то есть не надо будет ничего импортировать
https://docs.python.org/3/library/__future__.html
Много есть вариантов. Например, арифметические операции, там, сложение: объект класса А принимает другой объект класса А и возвращает результат в виде объекта класса А. Или, например, в pandas у датафреймов полным полно методов, которые берут на вход другой датафрейм и возвращают результат тоже как датафрейм.
Но когда я удаляю элементы из списка "shortcutsList", они удаляются и из списка "filesList"
Почему так?
ох решил проблему, написав:
filesList = filesList + results
А в чём дело, почему переменные связались друг с другом?
Потому что ты передал в filesList и shortcutsList не список, а ссылку на список. А при сложении списков создается новый список.
Нет, так ты создашь новый массив со списком внутри.
Тут описаны разные способы копирования массива: https://overcoder.net/q/3254/как-клонировать-или-скопировать-список
Что-то синтаксис бе. Pydantic хоть стандартные type hints использует.
Staticmethod? Обратись через cls в чем проблема?
Спасибо, как сяду, попробую все поправить.
600 строчек кода без знания ООП превратились в такой ад, что мне было главное, чтобы заработало. Сейчас работает, можно и оптимизировать
теперь перепиши код полностью в функциональном стиле
Вы мне помогли окончательно определится с выбором направления вката.
Так что сижу и учу питон. Если будут вопросы мне есть к кому обратится. Спасибо
Задача состоит теперь в том, что бы сгенерировать эти пресеты, для этого я хочу брать картинку и вырезать из неё в случайном порядке небольшие области. Это необходимо, что бы на выводе получались разные текстуры.
Но я никогда не работал с изображениями в питоне, через какую библиотеку это можно сделать? Может кто-то делал подобное?
Как эту переменную (допустим 10) сделать 10%?
поменял первый глобал, оказалось, что эта величина где-то дальше фигурирует. Забил
☝золотые слова, брат ☝
Есть возможность вкатиться в биг дату. Сразу и выучить, и начать по ней работать в рамках текущей компании. Стоит ли?
Мне главное работать поменьше, получать побольше, и чтобы работу было легко найти. Ради этого я вполне готво успердно учиться, и изучать более узкую специализацию. В общем, есть лис профит?
стронгли да
загадка от прогнозиста (на размышление дается 30 секунд)
Работа с бигдатой и есть, блять, нахождение ответов на эти вопросы.
иди, блядь, ищи ответ.
добавить дебажные принты
Наставить брейкпоинтов по всему пути следования
Вот допустим проверяю я элементарный ассерт.
На этом ассерте код ломается. Если я ставлю брейкпоинт на нем, то он когда доходит до бп останавливается. Дальше я жму продолжить и вуаля мы опять вышли с обшибкой. Странное поведение.
Там кнопка есть, чел.
/.../file.html не видит стили расширяемого базового шаблона /base.html
Я так понимаю, что это из-за того, что file.html находится дальше в дереве url чем (чем что?) базовый шаблон, хотя они и располагаются в одном каталоге. в базовом шаблоне красуется классическое href='static/base.css'
Как сделать так, чтобы html увидел css?
Главное ни в коем случае не пиши в питон чаты в телеге, поверь, пожалеешь в любом случаем, даже если задашь вопрос на который тамошние петухи не смогут ответить, то получишь столько говна в свой адрес, что потом отмываться неделю будешь
очевидно экспрешон в ассерте возвращает False (или None или чо там кастуется в булен как False)
>Вот допустим проверяю я элементарный ассерт.
Ты поехавший? Assert в чистом коде это же пиздец.
Как на уроке физики "предположим тело движется со скоростью...". Используй нормальную проверк, а assert оставь для pytest.
If a:
#a = True or a!=None
Все же очевидно. К тому же ты можешь видеть значения объектов. На худой конец print или logging.
3
Down vote
Accepted
If your style.css file is in the static folder of your project, then to make the resource available via Flask WSGI, you'll have to use url_for('static', filename='style.css') in your href for the stylesheet.
Чуваааак все же на SO разжевано, научись гуглить
Аллах вам StackOverflow дал, нет, пукаем какаем
> научись гуглить
скажи, что у тебя не бывало, что гуглишь два раза одну проблему, но во второй раз не можешь найти "то" решение
Ну тогда смотрит Ютуб с индусами. Как вы код пишете, если настолько херовый запрос в Гугл засылаете, что в выдаче нет результата с SO. Немножко в ахуе с таких вкатывальщиков. И уверен такой кейс есть в учебных материалах и в официальной документации
Как поймать эксепшн чтоб его обработать а потом снова его же пробросить?
Вот у меня есть что-то вроде того что на пикриле, я обрабатываю конкретный эксепшн который поймал но сам эксепшн-то теряется. Как мне его после этого возбудить чтобы он вызвался и отпечатался в логах (вместе со всем call-стеком)?
или
except APIError as e:
____raise e
или даже:
except:
____raise
в последнем случае будет поднято последнее исключение.
Ну и как определять почему? В чем процесс Дебагинга еба? Я и без этого знал, потому что пайчарм кинул ошибку на этой строчке.
Нет, лучше начать с версии 3.6+, это 2017 и позже.
Всё прозаичнее. Просто времени не было. Перед сном задал вопрос на дваче, чтоб ребята за меня погугли, а я с утречка уже решение прочитал, каеф. Таймменеджмент и делегирование)
ты охуел? я всю ночь тут сидел гуглил пока ты на массу давил
Смотреть что там вызывается в ассерте и там брейкпоинт ставить, смотреть чему равны переменные которые участвуют когда происходит заваливание ассерта и откуда они пришли и искать причину почему они не равны ожидаемым.
Видимо ссылки нельзя, набери в ютубе асинхронность python, там плейлист олега молчанова
Первое видео в плейлисте 2 года назад. Это точно актуальные вещи? С учётом того, что queues с чуть больше года назад стали deprecated. И 3.10 будут выписаны из питона.
А, актуальная именно нужна, там скорее теория, до asyncio только в 6-8 добирается, хз устарела ли инфа оттуда сильно, но послушать интересно, самая актуальная я думаю именно доки, куда деваться, асинхронщину ведь несколько лет назад еще завезли
Эхх, ну ладно, спасибо за ответ :3
Почему у женщин с возрастом руки жирнеют в области бицепса? У мужиков такого не видел.
Получил договор на интеграцию на 5000 баксов (чистыми меньше). Лучше бы блять не брались за эту хуйню. Говночисты из Европы написали такую хуйню (исходников нет конечно же), что теперь охуеваю. При том они интегрировали свое говно с российским железом, а я эмулирую работу российского железа. Полностью повторил протокол, а европейцы геи кучу багов оставили у себя. Нахуй такое просто нахуй. Хочу на галеру
Я пока еще готов свою жопу продавать, пока новый монитор не куплю хотя бы, сижу на вга кабеле блять, а тебе удачи
n = (int(s[1]) + int(s[2]) + int(s[3])) / 3
Почему list index out of range?
Блять, у тебя длина списка n, а индексы заканчиваются n-1, а ты пишешь чтобы у тебя брался индекс n+1
Есть функция updaterMain, я хочу выполнять её каждые 3 минуты. Собственно, на картинке это так и происходит. (пока rt1 выполняется, весь остальной код может работать)
Но я хочу дописать, чтобы можно было ставить эту функцию на паузу. Ок, вместо 3 я поставлю 9999, но как это красиво залупить?
Хуле, мне семью кормить. Лишних проектов после ковида нет.
last_ts =None
while True:
if last_ts is None or time.time() - last_ts >=3000:
#execute
else:
time.sleep(1)
Пилять, каждые 3 секунды поставил. Короче разберёшься.
Ты ебобо видимо. У тебя 2 задачи должны крутиться что ли? Так пропиши Threading и Semaphore (Lock, RLock).
Ты мне кинул кусок кода и спросил, получил ответ на основе кода. Давай полное ТЗ тогда
ебать ты терминами закидал. Я ещё настолько зелен, что даже вопрос сложно нормально задать
я пока беру методом тыка, и пока вопрос снимается - модуль, который создаёт иконку приложения в трее, прерывает дальнейшее чтение кода, поэтому я даже не знаю, куда первый луп воткнуть
Ты какой-то гуй под шиндовс делаешь? Анальная затея это.
В принципе, можешь взять тот же ткинтер и привязаться к его эвент лупу со своими задачками, всё полегче будет.
мне лишь бы закончить. Вообще можно ограничиться "Quit" который уже тут работает - тупо чтобы можно было закрыть программу, если она не нужна
Напиши батник
Ну как же по очереди. Основная часть это ожидания ответа, заслал много запросов и блокируйся себе на здоровье.
Вот рили каждый раз когда используется глобал - ты говнокодишь 109%, особенно если только учишься
Так он блять глобальные переменные в функции определяет. Пиздец... Кстати
> Вот рили каждый раз когда используется глобал - ты говнокодишь 109%
Это ты хуйню несешь. Если скрипт небольшой, то файл конфигов имеет смысл сделать глобальной переменной. Тогда при увеличении размера приложения очень легко будет отрефакторить код. Просто удаляешь глобальную переменную и пишешь from config import config. И код просто продолжает работать.
И не глобальной переменной, а просто переменной, которая в scope находится при импорте. И ты можешь по сути там константы предопределить и просто через config.MY_CONST обращаться
Бляяя, я это и имею ввиду. То есть, ты сначала пишешь
CONFIG = {....}
def foo():
return CONFIG.value
А потом, если возникает нужда, то пишешь
from config import CONFIG
def foo():
return CONFIG.value
И все работает и не надо ничего рефакторить лишнего.
Ты ебобо? Как ты из словаря без ключа возвращаешь значение? Будет CONFIG['key'], а лучше вообще config.toml забацать для обфускации или .env сделать и грузить через load_dotenv(), ещё одна обфускация. Не люблю конфиги в коде, потом самому же поддерживать.
> Ты ебобо? Как ты из словаря без ключа возвращаешь значение?
А это я хуйню написал, да.
> Не люблю конфиги в коде, потом самому же поддерживать.
А где всякие токены доступа хранить и логины/пароли, которые надо каждый раз в реквесты пихать?
SQLite, .env или просто в environment системы пихать в чем проблема? os.getenv('API_PASSWORD'), а SQLite может быть с Cipher что позволяет ее паролить.
Токен доступа для Гугла драйва например предлагают хранить в pickle. Вариантов овердохуя.
В случае запроса значения переменной из хранилища кстати позволит на ходу менять значения без перезагрузки сервиса. Не очень надежно в плане результата, но если например протухли credentials сервис не останавливается, а просто встает в состояние -1: wrong credentials, посмотрел статус в каком нибудь SQLite или другой БД, поменял значения и без перезапуска херащишь. Актуально, если есть очереди в памяти без Redis, AMQP, а перезапуск сервиса просто уничтожит эти очереди.
Как-то так.
А как поток получает ответ, сразу по готовности, даже если не он выполняется, или хитрым способом когда уже на него переключается?
корутины — специальные функции, похожие на генераторы python, от которых ожидают (await), что они будут отдавать управление обратно в цикл событий. Необходимо, чтобы они были запущены именно через цикл событий
футуры — объекты, в которых хранится текущий результат выполнения какой-либо задачи. Это может быть информация о том, что задача ещё не обработана или уже полученный результат; а может быть вообще исключение
Ну хуй знает, у меня отдельная самописная либа по работе с таск трекером есть, например. Оттуда import Config. Затем создаю объект класса Config с параметрами нужными. И затем при каждом запросе к апи тасктрекера, через прослойку в виде своей либы, я просто закидываю внутрь функции объект конфига. При этом вся внутренняя логика скрыта, а логика пользования либой очевидно и понятно.
Подозреваю, что система как-то сигнализирует, что пришли ответы, а там вм уже разбирается, кому передавать управление.
если не сложно, скажи, как избавиться от глобалов (в функции их приходится объявлять, потому что без объявления они считаются локальными) ?
в конце каждой функции писать "return(value)" и передавать её в myFunc1(value)?
или пример красивого кода, который как то поможет мне?
и в чём проблема глобалов?
или ссылку на что конкретно почитать или хотя бы что загуглить или на ютубе посмотреть?
а может даже совет как исправить конкретно этот код?
буду рад любому совету
-в коде пишу: создать ярлык прога.exe в папку с автозагрузкой
-перевожу прогу в exe
Select, poll, epoll
тонко
Ну добавь себе единичку в принт, если полегчает.
>Решил задачу за 12 строк.
>Поиск простых чисел
>Кто меньше?
Решение таких простых задач длиннее одной строки - детектор зеленого джуна.
твои задачки которые ты решаешь во время обучения никто читать не будет, поэтому тратить время на манячитабельный код во время решения задач такого уровня -- глупо и нерационально. О чистоте кода пора начинать задумываться только когда ты уже в состоянии пройти собес и устроиться на реальную работу, а не на этапе знакомства с ЯП. Всегда кекал с челиков которые не могут решить medium на литкоде зато знают PEP8 наизусть.
памагити
Pytest не ловил Exception в driver.title, хотя оно там есть.
Асерт выглядит так:
Assert “Exception” not in driver.title
Этот асерт стоит Сразу после кнопки Сабмит на одной странице. Когда принтую показывает другую страницу. Почему так?
Всегда реально найти работу программистом. Вопрос в том насколько ты умеешь приспособиться под рынок. Где-то джанга, а где то Флакс.
Сап, питонач. Нужно ли учить в django всякие формы и шаблоны, если сейчас все делается через rest Api и отдельный фронт? Кажется, что учу нинужные вещи.
А что сложного в templating? Может пригодиться для чернового фронта.
Карта отложения жира сильно отличается у мужчин и женщин. У мужчин обычно огроменное пузо, а у женщин по всему телу, в первую очередь жопа, ляжки, бока, и бицуха. Мужчинам нельзя жирнеть в конечностях, исторически так выживаемость падала. А пухлая женщина наоборот ассоциируется с выживаемостью, так как дольше может кормить молоком.
Потому что IO происходит в ядре. На время IO поток не выполняется, а значит гил можно отпустить и дать выполняться другим потокам. Вся эта херабора с гилом нужна чтобы ты мог один и тот же list например менять из разнах потоков, при этом оно не крешится. По-хорошему на каждую питонячую переменную нужно вешать автоматический лок (по сути гранулировать гил на каждую структуру), но это оказалось очень дорого, как по разработке, так и по производительности. Гил оставили чтобы работало быстрее в однопотоке. А сами потоки в питоне это классические потоки ОС, без всякой хуйни типа гринтредов.
сегодня завалил проект по срокам (сделал меньше, чем договариались)
все? проганье не мое?
https://m.habr.com/ru/company/otus/blog/458694/ вроде как ищут способ обойти GIL, но меньшими ресурсами чем Process. Хотя с process все просто, передал sig = Event() и реализовал graceful shutdown, а как тут будет хер знает. Тот же asyncio.run() выкатили без обработчика сигналов, ну и нахера спрашивается, все равно через loop приходится работать
Subinterpreters чёт заглохли, хотя идея здравая, делаем некий namespace для переменных, которые доступны только внутри этого интерпретатора, и там внутри уже гил не нужен. То есть это грануляция где-то между глобалом и каждый отдельной переменной. Асинк совсем не про это.
Что ты имеешь в виду под связыванием? Ты свою службу хочешь сделать? Или использовать те что уже работают?
Ну ты затронул тему GIL, я вот вспомнил. Вроде и жду, а вроде и не понятно как с этим работать
Обвязка WinAPI32 хуевая тема. Я писал сервис под Win10, но потом с миграцией на разные версии сервис часто переставал работать. Поэтому бери альтернативу - https://nssm.cc/
Скорее всего надо как-то в реестре прописать запуск питона с твоим скриптом. А апи раздавать или по сокетам/пайпам, или через COM: https://docs.microsoft.com/en-us/windows/win32/ipc/interprocess-communications
Как сделать, чтобы вызов scr.getch() принимал символ на ввод и блокировал вывод на одну секунду, после чего переменной c присваивалось нужное мне значение (например, 0) и управление возвращалось во внутренний цикл?
Цель: нужно, чтобы экран с некоторой периодичностью обновлялся и выводил объект smth, состояние которого изменялось бы посредством вызова smth.do_smth в отдельном потоке и управлением с клавиатуры.
(прошу прощения за говнокод и хуёвое объяснение)
time.sleep()
>cостояние которого изменялось бы посредством вызова smth.do_smth в отдельном потоке и управлением с клавиатуры.
(прошу прощения за говнокод и хуёвое объяснение)
ну так это уже Threading, создаешь объект, передаешь его в тред, перед изменением делаешь lock.acquire(), чтобы не было race condition потом lock.release()
getch полностью блокирует поток выполнения пока ты не введёшь символ. (Вероятно) можно слушать клавиши в отдельном потоке, либо включить no-delay mode https://docs.python.org/3/library/curses.html#curses.window.nodelay но тогда тебе видимо придётся самому раз в секунду дёргать этот getch.
Можно использовать urwid вместо curses. Там эвентлуп есть, который может одновременно и таймер и ввод символов ждать. Там конечно ещё компоненты есть, но никто не заставляет их использовать. Если использовать эвентлуп из asyncio можно даже по сети ходить и подпроцессы запускать, и всё в одном потоке.
Если хочешь графику, то sdl. То же самое, весь головняк уже решён за тебя, но вместо коконсольки будет отдельное окошко в котором можно рисовать.
Ты явно плохо понимаешь что такое селери и зачем его делали. Это распределённая очередь задач, читай внимательно каждое слово. Распределённая значит что селери может работать даже на кластере из сотни машин. Очередь значит что есть какой-то генератор заданий, чаще всего это веб-сервер, которому хтмл надо отдать прям сейчас, а какое-нибудь письмо прислать как получится. Задача означает нечто выполяющееся за конечное время, например за минуту. Никто не делает асинхронность для выполнения задачи.
Почему ты не можешь просто в одном скрипте одним циклом, в одном потоке сделать 1000 запросов в час?
Ну первое, зачем мне селери это то что эти запросы придется делать, например, каждый день в промежутке времени и регулировать скорость. Второе, генератор заданий это собственно джанго, которое(тут уже мне надо так же смотреть, например, что отдавать в селери) ставит задачи, сделать 1000 запросов с такими данными. Третье, я не уверен как работает асинхронный джанго, но мне нужно, чтобы эти задачи делались в фоне, а асинхронщина нужна потому что сам запрос это просто дерганье стороннего апи, которое может выполнить задачу за рандомное время и может быть разный ответ, а получать статус этих дерганий нужно реал тайм, надеюсь понятно объяснил. А делать в цикле 1000 запросов когда каждый обрабатывается минимум секунд 30-60 это очевидно неверно. Я думал изначально для этих запросов сделать отдельное aiohttp приложение от которого нужно максимальное быстродействие, но если в celery получится выполнять задачи асинхронно то не понадобится отдельное приложение. Пока писал понял твои слова про очередь и то что задачи не должны быть асинхронными, но селери нужен для отложенных задач, а асинхронность для того чтобы не ждать ответ от запросов, т.е сама по себе задача это вызвать 1000 запросов и они должны быть асинхронными минимум в рамках одной задачи, после каждого ответа так же должна быть логика по обработке ответов
Алсо т.к в селери будут отдаваться только задачи с отложенными запросами, которые не нужно делать прямо сейчас, а например 3 клиента хотят в 18:00 делать по 1000 запросов, значит сами вызовы 100% должны быть асинхронными, ответ клинту идет сразу, что задача выполняется, вот статус всех запросов и так каждый день. Поэтому мне кажется в таком случае моя реализация в целом верная, либо просто запросы к селери, которые делают асинхронщину, либо к приложение aiohttp, которое отдает ответ сразу и селери сразу возвращает что процесс запущен, а уже aiohttp ждет ответа, делает логику и записывает в бд, я не прав?
Давай ещё раз. Выясняем что у тебя уже есть приложение на джанго, которое генерит задания сделать запрос. Что нужно ещё получить результат запроса: куда его и кому потом отдать?
Селери это такая асинхронность без экономии. Ты тупо занимаешь целый тред задачей и компенсируешь простои из-за IO большим тредпулом, не по количеству ядер, а количество ядер x 2 + 1, обычно рекомендуют так. В селери нет нужды обслуживать 10к соединений, поэтому нет нужды в асинхронности.
>>49979
В селери нет планировщика. Заказать селери дёрнуть что-то в 18:00 скорее всего без приседаний нельзя. Делай отдельный сервис, хотя бы чтобы поставлять задачи в селери в нужное время. Всё же неясно, как клиенты получат результат задачи, по сокету в реалтайме или просто откроют страничку с репортом через день?
А ещё, как насчёт того чтобы сам клиент дёрнул себе сторонний сервис и ждал результата? Зачем городить такой сложный прокси?
1280x720, 0:09
Я предполагаю что результат каждого запроса записывается в бд, например, статус ок или ошибка или что-то еще, соответсвтенно джанго создает 1000 объектов в бд, пользователь нажал кнопку и получил сразу ответ в виде 1000 строк со статусом ожидание, если ответ где-то пришел быстрее, то эта строка заменится на ок или ошибку, т.е например в первые 2 минуты ответ поступил от 250 запросов и их можно будет увидеть, остальные в ожидании пока не пройдет логика.
> В селери нет нужды обслуживать 10к соединений.
Соединение будет только одно, но запросов много, опять же проблема не в селери самом, а в том, что задача с 1000 запросами обязана быть асинхронной, как это сделать я уже написал, либо селери, либо отдельный сервис аиохттп(джанго нужен для удобной админки и орм с которым я хорошо дружу), если в селери нет планировщика(хотя я уверен что где-то читал об этом), то тогда уж точно проще передавать параметры для этой 1000 запросов просто на аиохттп и все, через отдельный планировщик. Я честно так и не понял в чем именно проблема(предположим простая логика):
передаем через брокер 1000 айдишников из бд(они выбираются еще джангой через квери параметры), селери(для селери только одна задача будет) обрабатывает задачу, т.е принимает 1000 айди, создает асинхронный луп, в него добавляет асинхронную функцию по обработке запроса и дальнейшей логике на каждый запрос, как только все запросы отработаны задача завершается, если клиентов больше в одно время, то каждый будет ждать просто пока все задачи выполняться.
>клиент дёрнул себе сторонний сервис.
Нужна логика до отправки запросов и после них
Я сейчас понял что, чтобы не нагружать слишком сильно внешний сервис, при том что запросов может быть максимум в час(100-1500 на человека) лучше к тому же распределять эти запросы через делей = число запросов / 3600, тут так же появляется необходимость в асинхронности, делать цикл в котором через делей добавляем таски в луп и при этом этот цикл тоже должен быть асинхронным, чтобы при этом другие такие же циклы работали одновременно. На самом деле на практике я точно что-то придумаю, пока просто пытаюсь выбрать вектор своих мыслей и придумать примерный алгортим из того что я знаю сейчас, не гугля всякие доки и уже готовые решения(интересно можно ли их найти)
Пиздец ты зациклился на асинхронности. Тебе нужно оздоровительное воздержание от асинхронности прописать на недельку. Но в общем-то да, наверное даже один поток aiohttp справится и со всеми запросами, и с планированием, и со складыванием результатов в базу. А селери тебе скорее всего нахер не нужен если ты так хочешь асинхронность.
Подумай лучше вот про что. Как твой микросервис будет переживать рестарты? Чо делать если контейнер/процесс убивают, а у тебя 10 запросов уже отправились? Можно ли дёргать эти адреса повторно? Сколько раз и когда нужно делать ретраи? Нужна ли тебе очередь между джангой и этим сервисом? Возможно ли отделить БД этого сервиса от основной?
Можно ли при помощи opencv детектить столкновения этих двух шариков на пикриле?
Просто на деле запросы это телефония и ждать 30-40 секунд на ответ нельзя, а асинхронность по-моему именно для этого и нужна, поэтому и циклюсь, значит да, завести какой-то планировщик и просто отправялть на aiohttp.
Ретраи добавить вроде не сложно, а вот про рестарты не думал, пока даже не знаю как минимизировать проблемы при внезапном рестарте в теории, как минимум надо узнать что происходит с брокером в таком случае, потому что в нем будет проблема главная, можно на айди просто ограничения добавлять, типа время последнего вызова и проверять прошло ли достаточно времени(правда если клиенты разные на один айди звонят, то тут будет проблема), так же не знаю даже в теории о нагрузках на бд и как их измерять, например будет в час на бд 2-5 тысяч запросов с выборкой 1-го значения просто по индексированнуму айдишнику, будет ли успевать бд и как вообще ее расширять
Допустим я вот наложил контур на шарик, координаты отслеживаются, как мне столкновение детектить?
не шарю за библиотеку, может уравнение составить простое? Гугли формулу круга и выводи нужное тебе соотношение
Ну создай нагрузку фейковую и посмотри что будет. Расширять можно вертикально и горизонтально, бери машину пожирнее для начала, если не помещаешься то партицирование, разбиение на микросервисы, тысячи вариантов есть.
Да это очевидно через обычный слип нагрузку делать, другой момент как именно на практике увеличивать возможности приложения, микросервисы понятно, разнести бутылочные горлышки по серверам, а в остальном вот уже сложнее(кстати слава богу что придумали асинхронщину нормальную, я не представляю как было бы ебано сейчас парится с потоками, может генераторами или даже с корутинами, все за меня придумано, мне оставалось только доку глянуть и вот уже код работает в бесконечность раз быстрее на объемах)
Для этой логики по идее Селери не нужна, как мне кажется.
Тут полностью независимая система грузит задания и получает статус состояния.
Впрочем я с Селери никогда и не работал.
Мне кажется, что схема такая, что задания записываются в БД и в очередь, раббит например, из которого пул процессов берёт задания на обработку.
Можно даже в данной задаче и без раббита, ещё проще, руками всё реализовать. Потому что несложно на самом деле.
В БД прописываются задания, отдельно работает сервис на базе asyncio, можно с aiohttp вместе. В этом сервисе пул задач крутится. И одна задача-менеджер, которая раз в сколько-то секунд берёт список заданий из БД, раздаёт их воркерам, и записывает результат обратно в БД.
То есть ты руками реализуешь брокер сообщений, но это несложно, потому что ничего из серьёзного функционала, ради которого нужны сложные сервисы вроде раббита, ты не используешь.
Я пока про селери читал где-то говорилось что очереди в бд хранить неверно и в проде все полетит, пока все еще думаю над этим, а с селери уже разобрались, что вроде не нужна, нужен планировщик(я думал в селери он собсна есть), отдельные функции на aiohttp, а остальное на джанго что нужно, спасибо всем за ответы, кстати
Да так же. Была уже асинхронщина во всяких торнадах, твистедах и гевентах. Тупо половина стдлибы манкипатчится чтобы дёргать неявный эвентлуп.
Горизонтально довольно просто скейлится. У тебя есть балансировщик нагрузки, он подхватывает новые машинки которые ты запускаешь с серваками, и как только оно способно принимать запросы, балансировщик начинает его понемногу нагружать. С базами это сложнее, но принцип похожий. Базы лучше разделять на части. Ещё всякие key-value намного лучше разделяются в кластеры, чем реляционные, в них намного меньше гарантий, разрабатывать под них конечно ебано, ни транзакций тебе, ни схем, ни джойнов, зато скейлить одно удовольствие.
Какие кластеры баз? Товарищ говорит про 5 тысяч запросов в час. Условно 10 запросов в секунду в пике.
Это вообще ни о чём. Любая БД и MQ с такими объёмами справится.
Если есть несколько серверов, или несколько процессов-воркеров, то надо использовать отдельный MQ, иначе можно вообще без MQ. Если важна низкая латентность, чтобы запрос сразу на исполнение принимался, то тоже лучше уже готовое решение использовать. Или нет, если задачи раздаёт тот же процесс.
Хз, переживает товарищ, что не потянет хайлоад. Так-то конечно надо сначала упереться в этот хайлоад, а потом думать.
>Так-то конечно надо сначала упереться в этот хайлоад, а потом думать.
Вот о том и речь, что хайлоад это в 1000 раз больше нагрузка.
Вариант "для детей", поиграть, и как концепт:
Приходит запрос по http. Вебсервер (aiohttp) даёт задание на обработку, прописывает в словарь заданий задачу со статусом 'pending' и кладёт в очередь айди этого задания.
В этом же процессе крутится пул воркеров. Свободные воркеры слушают очередь, берут id задания и в хранилище выставляют статус 'working' и время, когда начали работу, и айти воркера, который работает. Они могут запускать подпроцессы, если тяжёлая работа какая-нибудь. Как задание исполнено, в хранилище выставляется статус done. Как вариант, ещё сообщение дополнительно в специальную очередь высылается, для исполненных заданий.
Этого может быть достаточно для чего-то даже весьма боевого.
Возможно вместо хранилища нужна БД, если надо, чтобы задания сохранялись надолго, в том числе в случае перезапуска, падения и т.п.
Если у тебя несколько процессов, например вебсервер отдельно, или несколько процессов-воркеров, или они вообще на разных машинах, то уже недостаточно просто очереди от asyncio.Queue, надо что-то, что работает на много процессов. Тут уже разумно взять готовое решение, например раббит. Или что-нибудь ещё.
Надо придумать, как оформить сериализуемый пакет с заданием, и как хранить его, результат исполнения и т.п. в БД.
Пока объёмы на уровне десятков запросов в секунду, очереди сообщений, БД и т.п. не проблема вообще. На сотнях в секунду уже надо думать о том, насколько у тебя корректно запросы составлены, индексы и т.п., можно тормозить ни на чём. Но реальный хайлоад на тысячах запросах в секунду начинается. Вот там уже можно попасть в ситуацию, что просто MQ или база не справляются.
При этом действительно серьёзный хайлоад с величинами другого порядка оперирует.
Это надпись на вкладке, да. Но там он тоже пишет Page - exception. Но ассерт это не ловит и принтит тайтл без ошибки, будто ее там и нет.
Нашёл. Получается что драйвер хранит переменную, а не постоянно обновляет, решение - добавление неявного ожидания с локатором тайтла.
Всем спасибо
>Если важна низкая латентность,
Краеугольный камень. Тот же Rabbit может быть persistent, а может и не быть. Зависит от задачи
Во, наконец узнал хоть какую-то циферку, чтобы сравнивать, 1000 запросов в секунду уже хайлоад, верно?
Ответа нет, но думаю это мне собственно, опять же рад наконец увидеть цифры числа запросов для хайлоада, слишком абстрактно для мен было, я все еще думаю что много воркеров вообще не нужно, если они будут синхронные, потому что все проблемы с тем что 30 секунд ждать ответ решает асинхронность, потому что сама логика элементарная, буквально записать в бд и в случае эксепшона логирование + репит, поэтому не будь ожидания даже воркеры не были бы нужны, а так асинхрнность, осталось только придумать как при запросе на aiohttp сразу отдавать ответ джанге, чтобы он мог дальше делать запросы, а нынешний просто в лупе оставался, то что брокеры записывают на диск при падении интересная инфа, надо почитать об этом, в остальном вектор стал понятен после всех сообщений. Интересно почему такой ажиотаж вызвал мой вопрос, даже приятно)
https://www.youtube.com/playlist?list=PLzMcBGfZo4-lwGZWXz5Qgta_YNX3_vLS2
Где-тут в середине примерно чел пишет колижн механику для 2х обьектов.
Очень много информации. Доки официальные читай и доки по библиотеке, которую используешь, даун. За тебя ещё твою работу делать?
>заказ на 800 долларов
>несколько собесов и переговоров
Это что, каждый раз так? В эти 800 сопровождение входит?
https://redis.io/clients#python
Выбираешь клиент для Redis на Python и читаешь документацию по нему, хрен ли вы такие тупые. Чаще всего указывают в официальных доках какие клиенты существуют и ссылки на них. Бери тот что поддерживается и последний релиз не позднее 19 года естественно.
Там снепшоты. От выключения света не защитит.
Возможно всё, но положение у тебя откровенно хуёвое. Сам вопрос как ты к этому пришёл как бы намекает что ты тот ещё распиздяй, и за полгода ты разве что десяток аниме посмотришь, а не вкатишься.
Редис это всего лишь хранилище, которое не знает ни о пользователях, ни о всяких онлайнах. Ебись, за тебя твою работу тут не сделают.
распиздяй да, но щас на носу моя жизнь, надо за полгода оформить грамотный вкат, готов почти все свободное время уделять этому дело. Интересует будет ли прок? Или учиться чему-то другому?
За полгода только пхп
Ты нихуя не сделаешь и будешь таким же овощем. Зачем зря жопу рвать?
Есть костыльный способ. Делай скриншот когда эти шарики сталкиваются. Вырезай столкнувшиеся шарики, делай проверку на поиск столкнувшихся шариков с скриншота через locateCenterOnScreen в pyautogui.
Либо узнать радиус шарика в пикселях от центра, например будет 10, у второго тоже 10, если центр шарика1 находится ближе чем на 20 пикселей к центру шарика2, то столкновение.
Бля с первым проебался, он не подойдёт.
Просто реально интересно, что за 800 долларов хотят. Что ещё с двумя собеседованиями.
это галера или нет?
Если бы я слал запросы обычным линейным способом, то время было бы примерно 0.9
Не понимаю, почему, если я код оборачиваю в функцию он выполняется значительно медленней?
Ты реально замеряешь время получения ответа с адресов LINK1 LINK2? Кстати сейчас loop никто в параметры не передаёт, наверное ещё с питона 3.7.
Подскажите, как еще можно решить эту хуйню? Мой ответ не принимает.
Яндекс
>Ты реально замеряешь время получения ответа с адресов LINK1 LINK2?
Да.
Я понимаю что время разнится, и от серверов зависит.
>Кстати сейчас loop никто в параметры не передаёт, наверное ещё с питона 3.7.
А как правильно делать? можно с примерчиком
Обожаю такие формулировки в курса, обычно это криво обработанные транслитом задачи с забугорных курсов. И попробуй угадай что от тебя хотели.
Я думаю что это всякие сраные математики. Упорятся своими абстракциями и только они понимают что хотят.
Какая нахуй позиция строки? Позиция строки где, в самой себе? Позиция подстроки (символа) в строке? Я также собес в пынькофф не прошел, потому что манда по скайпу задачи на логику давала с таким же условием.
> А как правильно делать?
Да просто убери его везде. Оставь только loop.run_until_complete.
Нафига ты это всё в жупитере делаешь?
> This module patches asyncio to allow nested use of asyncio.run and loop.run_until_complete.
Распорки какие-то.
Для чего тебе sslContext? Свои корневые сертификаты?
Зачем тебе проверка i на равенство 0? У тебя всё равно в принте тогда будет ' '*0=none + word
Точнее не none а пустая строка
Ты ебобо, импортирование дохуя времени занимает и ты тащишь библиотеки целиком в память
У него время замеряется после импорта.
прогаю на питоне, но до сих пор считаю си лучшим языком не свете
строго и лакончино - ничего лишнего
если не тащить его в поля типа комп зрения и прочего очень уж высокоуровнево говна - он топ
а про ограничения и тп - ну сам же можешь ответить на свой вопрос
конечно надо
> Мне тут недавно пришлось вживую столкнуться с кодом на си
> но возник вопрос, стоит ли вообще понимать
От тебя требуют писать на си? Если нет, то забей хер. Если хочется — покопайся, не повредит.
профессиональная питонодеформация видимо
>понимать, например, указатели
Нужно - чтобы понимать, что происходит с аргументами функции при их модификации. Например, что произойдет при присвоении нового значения числу, а что при добавлении элемента в массив. Изменятся ли они за пределами функции и почему?
>как компилируется код
Не нужно.
>как выглядят инструкции
Не нужно.
В голосяндру, содомит
>стоит ли вообще понимать, например, указатели и т.д(как раз их я знаю, но наверное есть что-то еще такое же важное) для разработчика на питоне, как компилируется код, как выглядят инструкции, так же я только недавно начал в принципе осознавать, спустя год кодинга, что вообще означает интерпретируемый язык и какие ограничения это накладывает, вопрос нужно ли в принципе это понимать?
В принципе нужно, конечно же.
Это называется "системные знания". А система подразумевает знание очень много чего, что вроде бы напрямую в твоей работе не используется. Иначе это макакинг.
Скажи, а какие еще знания из низкоуровневых языков стоит знать, указатели я понимаю, всякие разименовывания и пр., знаю как ассемблер работает в очень общем виде, знаю как выглядят машинные коды или как там это фигня когда байтам команды присвоены, даже в работу транзисторов погружался немного,что еще важно для общего развития?
Все, поэтому оно собственно и общее
ХЗ, не уверен, что я сам достаточно знаю.
Что-то по железу. Например про инструкции, расширенные инструкции, кеш память и просто память, многоядерную специфику и т.п.
Про то, как программы работают, операционная система. Про понятия системных вызовов, виртуальной памяти, защищённых режимов и т.п., про разные виды тредов, селекты и др.
Про файловые системы, про сети.
Про технологии компиляции, идеи оптимизации, про JIT.
В случае питона про то, как всё это реализовано внутри, на уровне Си кода.
Кстати jit и компиляцию я еще не трогал, надо почитать
Спасибо. Почитал и охуел немного.
Получается мне нужно отдельную ДБ где-то сохранять? Мне нужно буквально 2-3 ключа записывать. Есть ли какие-то альтернативы?
Вообще задача такая для параллельного тестирования, когда пайтест ранит один тест с таким-то юзером, нужно посмотреть, что этот юзер уже используется (logged in) грубо говоря, и тогда взять другого юзера из списка. Может ли это fixture сделать? Если да, то как.
Просто записывать на диск нельзя юзернеймы? в виде жсона например, раз тебе скорость не нужна максимальная, либо просто в памяти нельзя хранить?
Бритва Оккама. Если эмулируешь редиску - словари, эмулируешь реляционку возьми SQLite. В проде будет конечно же все не так, но нахуя в тестах пулить коннекты да ещё с исключениями и реконнектами (если ты не ебобо заебашь коллбек другой)
Ну а что делать то? Проблема такая. Когда ранишь тесты параллельно, несколько тестов используют один и тот же аккаунт. Поэтому, чтобы не выкидывало дали задание, либо через редис записывать юзера и соответсвенно другого нужно выбрать из списка юзеров. Там таких всего 4 варианта. Но пока ничего лучше этого не услышал. >>51067
>>51068
Нет, на etl-девелопера
>— Есть у кого на примете годный курс лекций по алгоритмам? Формат лекций мне как-то ближе, нежели просто чтение книги.
>МФТИшный курс, например, https://www.youtube.com/playlist?list=PLRDzFCPr95fK7tr47883DFUbm4GeOjjc0
Нашёл на первый взгляд интересный курс по питону
https://www.youtube.com/playlist?list=PLlb7e2G7aSpTTNp7HBYzCBByaE1h54ruW
Не смотрел, надо бы час-два потратить, чтобы рекомендовать или нет. Но вроде бы больше именно про специфику питона, а не основы программирования вообще.
Может быть очень годный материал и стоит того, чтобы в шапку его воткнуть.
Некоторым больше хочется нормальных лекций, причём академических, а не в стиле тик-ток.
Там на первый взгляд смотрится больше как выжимка про специфику питона, что очень интересно, если ты уже можешь программировать, а не обучение программированию с нуля, как в 90% всех книжек.
Вот ты сам можешь рекомендовать какие-нибудь три книжки подобные? Я только одну такую видел, называется intermediate python вроде бы.
Если по алгоритмам то грокаем алгоритмы.
А что топ кул?
Сколько всего книг по питону ты прочитал за жизнь?
Postgress, Python
Суп, ненавижу программировать, надежда только на вас.
Через джанго сделал мне чел чтобы я добавлял сразу в бд данные, в таблицу, вот зашёл на сервер через pgAdmin, не могу найти то что добавил. Это значит нихуя не добавилось или я неправильно смотреть? Так ведь надо посмотреть что хранится в таблице, через селект олл фром тейбл?
Как сделать, чтобы, когда пользователь вводит параметр, которого не существует, вылетала ошибка просто принт
>Как сделать, чтобы, когда пользователь вводит параметр, которого не существует, вылетала ошибка
Разве по умолчанию он так не делает? Вот, я вбил учебную программку из документации https://docs.python.org/3/library/argparse.html и сохранил ее в файле argtest.py:
#!/usr/bin/env python3
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', help='foo help')
args = parser.parse_args()
Если я использую аргумент --foo, то ничего не происходит, ибо не указанно что делать, но никакой ошибки нет, аргумент известен, а вот если я использую неизвестный аргумент, питон закономерно шлет нахуй:
$ ./argtest.py --hui
usage: argtest.py [-h] [--foo FOO]
argtest.py: error: unrecognized arguments: --hui
Тебе что-то другое надо?
>>51134
В общем менеджер сказал, что просто в памяти не будет работать на удаленной машине дженкинс, потому что ее запускают несколько человек.
Получается мне нужно поставить сервер и захочтить где-то - это я могу. Потом нужно подключиться и записывать пользователей .set. Каждый другой тест проверять .get если такой юзер уже есть, то взять другого, по окончанию теста удалить ключ и на всякий сделать его expire in 10 mins.
Вопрос, я не очень знаком с питоном вообще и фикстурами, как запилить это все в фикстур? Я так понимаю scope должен быть пер class.
Если кто-то готов серьезно помочь, могу скинуть денег или конфет купить. Спасибо!
Анончики, а у питона есть будущее в вебе? Я понимаю, что как язык для простых скриптов и подобного он монополист, а в мл по сути навсегда. Но что с вебом? Или надо уже на шарпы/пыху переезжать?
На го работы еще меньше, чем на питоне. И я серьезно спрашивал, если что
На фронтэнде нет. Щас прибегут мне рассказывать про brython/transcrypt, но это скорее попытка сделать жс более похожим на питон.
На бэкэнде вроде бы уже давно его будущее состоялось. В гугле дохера питона, инста на питоне, библиотек жопой жуй, рабочей силы дохера, вакансии есть. В случае чего перекатиться в го говорят можно за пару недель.
Твой вопрос больше звучит как какое будущее у отвёртки в машинстроении. Будто бы выбор отвёртки сейчас решит вообще всё в будущем. Рассчитывай на то что ЯП неизбежно умирают со временем по тысяче разных причин, и что знание одного ЯП это автоматически сколько-то процентов знания всех других ЯП.
>пыху
Работы дохуя, для тебя двери почти везде открыты за 20к лендосы на wp, но как только будешь искать что-то достойное, то окажется что вакансий мало и синьерность требуется высокая. С питоном мало ждуновских вакансий, слишком много вкатываются. За Шарп не скажу, но у них частенько вакансии попадаются.
>>51768
Говно обычно требуется совместно с чем-то еще
Питон в вебе бывает двух видов. Либо джанго(рест), либо асинкио (aiohttp, fastapi и др).
Джанго это большой индустриальный фреймворк. Асинкио это технология асинхронного программирования в первую очередь, плюс масса сопутствующих инструментов.
Ты учишь не язык в первую очередь, а технологии программирования. Перекатиться с одного языка на другой в рамках одной технологии и одного подхода может даже проще, чем освоить с нуля технологию, оставаясь на привычном языке.
На текущий момент платформа развивается и растёт, в том числе в веб приложениях.
Я просто в свое время дрочил жангу, но по итогу вкатился в пыху, по причине отсутствия вакансий, но в пыхе как оказалось большинство вакансий говно на цмс, в итоге сижу делаю на Битриксе формы "благодарим за обращение! Мы вам перезвоним в течении 15 минут", указанные в вакансии ларавел видела только в техподдержке говнокода в который насрали фрилансеры индусские школьники. За полгода ни одного нормального проекта, все нормальные проекты проходят мимо меня тем кто посиньорнее, зато примерно полдня свободен и устроился стажёром на жабу, пилю потихоньку интерпрайз легаси, спринг, хибернейт, ждбс и всякая апачевская хуета, через пару месяцев перекачусь, а может и раньше.
Сейчас наверное могу на питон попытать счастье на удаленку, дажнгу повспоминать и наверное пройду, но по бэку вакансий очень мало, даже на руби больше.
>Ты учишь не язык в первую очередь, а технологии программирования. Перекатиться с одного языка на другой в рамках одной технологии и одного подхода может даже проще, чем освоить с нуля технологию, оставаясь на привычном языке
Удвачиваю сам начал с питона+Джанго, потом продолжил в пхп+ларавел переход был плавный, там практически все тоже самое, в пыхе только первые 2 недели бесило доллары в начале переменной ставить, остальное совсем без проблем. Потом в джава+спринг, с языком вообще проблем не было, тем более что пыха по синтаксису ООП та же джава, даже сейчас типизация появилась и все стараются писать указывая типы, но вот со спрингом это пиздец как все сложно и не понятно, этот апликейшн контекст, бины, депенденси инжекшены, хуй пойми как оно работает, ещё и орм хибернейт со своими сложностями, какой-то ждбс между базой и орм, нахуя половина конфигов нужна, вроде все правильно собрал какого хуя весь терминал красный, что за томкет и вилдфлай, нахуй они нужны. Короче только через месяц начал что-то просто понимать.
Довелось побывать руби, вообще без проблем, увидел код и все понятно, рельсы практически та же джанга и ларавел, только синтаксис языка слишком сахарный, даже бложик написал ну почти дописал, забил под конец
Я думаю они и сами не знают нахуя сделали из Явы (вполне себе понятный по конструкциям язык) полнейшую нечитабельную хуйню, а нечитабельна стала из-за кучи зависимостей, абстракций и вложенностей. На питухоне я могу спокойно оверрайдить говнометоды из библиотеки или вообще часть говна переписать под свои нужды.
А в Яве пока JDBC настроишь уже пожалеешь, ебучий в сраку DBeaver. А все потому что JVM, это явно из-за нее такие требования теперь.
1. Обязательно писать классы в отдельных файлах?
2. Интерфейсы из Java реализуются просто в классах штоле? Типа
class 2chable:
....def post_shit():
........pass
>Очередной нубовопрос
Ну смари, класс это короче как в школе, училка это инит, завуч это итер, методы и данные это твои одноклассники. Понял?
1) Ну, если класс весь такой большой и используется в разных частях проекта в разных файлах, то рекомендуется, выносить в отдельный файл и импортировать оттуда.
2) hz kak tam v java
нет, я как-то больше традиционные аналогии понимаю. ну там Animal, Lion(Animal), Dog(Animal) etc
аналогия простая.
класс это тип обьекта
например мяч. с определенными базовыми параметрами
например он круглый.
остальное это уже ты можешь передавать в класс, например делать мячи для баскетбола, анальный шарик например.
все это будет класс мяч, но с разными целями. понятно что баскетбольный мяч в жопу не засунуть. в отличие от анального шарика.
Их местный что ли? Так а какого буя тестовой базы нет с кучей учеток? Что за галера такая уебищная?
Нет, но логику лучше соблюдать
Есть формат хранения информации нативный для питона аналог json, xml?
Т.е. чтобы можно было подсосать информацию, но чтобы не выполняло код.
Сопоставляю инструментарий flask-sqlalchemy и собственно sqlalchemy
Интересуют методы экземпляра таблицы, например, метод coloumns. Нашёл его во flaske в db.table(table_name).colomns. но этот сучок возвращает пустой спископодобный объект, как и все методы экземпляра таблицы. То есть структуру таблицы вообще не посмотреть отсюда. Итого два вопроса:
1. Какого это хуя такое поведение?
2. Как получить доступ к этим методам из flask-sqlalchemy?
Спасибо
Благодарю.
А ты что хочешь то? Нахуя тебе метод колонка в орм? Если выебистый дохуя, то пиши на чистом sql
Чисто ради того, чтобы разобраться со структурой фреймворка. Ебучая колонка мне нужна, но хотелось бы знать, что через экземпляр базы данных я могу получить доступ к экземплярам таблиц, а через них к экземплярам колонок. Ебучая колонка мне не нужна, но и метод count не пашет в db.table(tablename).count. Я знаю другой способ посмотреть количество рядов в таблице, но какого хуя не работает самый логичный из способов?
>1. Обязательно писать классы в отдельных файлах?
Нет, это не Джава. В питоне это не обязательно, нет рекомендаций pep8 и традиций.
> Интерфейсы из Java реализуются просто в классах штоле?
В питоне нет интерфейсов в том смысле, как в Java. Там совсем другая модель ООП.
Это была просто опечатка, с телефона писал)
Ini файлы, прикинь
Да, это бесит язык вполне себе годный, но то что с ним делают это пиздец. Синтаксис понятный и простой, JVM шустро работает, написал тогда одну фичу надо было около 100000 обойти посимвольное чтение, регулярки и прочие радости, запустил и решил кофе попить, встаю со стула, а оно закончило, за 20 секунд 100 000 файлов примерно по тыще строк, КАРЛ! Но как открываешь какой-нибудь проект Spring+JDBC+Tomcat то пиздец тысячи классов и интерфейсов которые делают нихуя, ради всяких солидов и во славу сатане делают классы с 1-2 методами и куча интерфейсов для красоты и инверсии зависимостей. В питоне принято более лаконично и аккуратно писать по сравнению с жабой.
Раз такая пьянка, может ты знаешь, как отключить стандартный эксплорер и запустить вместо него своего менеджера?
Реально клон кстати, но сервиса небольшого, выше обсуждалось как асинхронно запросы делать, вот это моя ветка, по сути джанго рест апи сделать + планировщик + функции для вызова стороннего апи телефонии, чтобы отдавать буда звонки и т.д, на первом собесе рассказывал про себя, обсуждали тз, на втором смотрели конкурента и я рассказывал что и как реализовывать буду по всем функциям, потом он меня выбрал, а сейчас еще договор просит подписать)
Про Qt уже сказали, для него в питоне есть обвязки PyQT и Pyside, еще можно упомянуть WxPython, это обвязка для WxWidgets, там стараются по возможности использовать встроенные возможности ОС, поэтому на разных ОС приложение будет смотреться органично
А вообще есть из чего выбирать:
https://github.com/vinta/awesome-python#gui-development
короче сейчас перекатываюсь из игроиндустрии, где писал на спп
хочу подготовиться к собесам через пет проект
вопрос: есть ли у вас, примерно, идеи чтобы такого замутить, чтобы показать и знание крестов и знание питона?
Бля, отвечал на вопрос про пет-проект, капча заставила выбирать картинки с ВЕЛОСИПЕДАМИ.
у крестоносцев в треде был момент, когда они делились норм работодателями (к которым ходили на собесы либо наслышаны)
и что спрашивали на собесах
го мб также?
Есть же. Нет механизма, который был записывал учётку при каждом тесте, чтобы избегать повторения аккаунтов.
Эта строка должна быть ин-том, который потом будет передаваться в фикстур как версия на которой ранить или скипать.
>>195274
bad_chars = ['.']
test_string = "12.3.400.55"
test_string = filter(lambda i: i not in bad_chars, test_string)
test_string = "".join(test_string)
print("Resultant list is : " + test_string)
Хотя там всё равно будут строки, надо ещё прокрутить через map какой.
есть словарь. далее совбственно вопрос как используя данные словаря, делать запросы к JSON если есть условие что если as_cnt меньше 100 то все так и оставляем.
если больше то делаем несколько запросов с увеличением src на 100 до условия src = as_cnt c округлением до целого.
https://pastebin.com/gzEzGq1u
Вот если взять зарплату как 10 долларов в час, что как бы очень скромно. Ты уверен, что вот в состоянии эту работу сделать за две недели? Причём добавь время, потраченное на собеседования, в эти самые две недели.
Ты берёшься за проект с кучей технологий. Ну реально, не смешно просто.
Вот реально, подумай десять раз, прежде чем браться, и особенно думай, под чем в договоре подписываться. А то будешь возмещать какую-нибудь упущенную выгоду из-за того, что не реализуешь, что надо. Или впахивать полгода, пока все хотелки не сделаешь.
Такая работа стоит больше скорее всего. С учётом подхода с собеседованиями явно больше.
Такие заказчики потом очень долго будут мозг ебать.
Ну тебя же есть
data = {'dmn':'code','src':'100'}
пишешь
data = {'dmn':'code','src':doc['as_cnt']}
Можно сделать базовые параметры и мерджить. https://ideone.com/emMCTC
>Django
Не удивлен, если там ошибка джангодебила, так как просто не сейвится запись или constraint не указан AUTO_INCREMENT
m =Model(...)
m.save()
>из 12.3.400.55 получить 123400
>1.22.333
>11.1.333
Ты уж определись, у тебя 3 сепаратора или 2.
>1.22.333. Можно быть 11.1.333
И что нужно получить из этих строк?
122333 и 111333?
Должны учитываться длины подстрок? Как?
Тебе нужно, чтобы корректно сравнивались версии, и чтобы
11.1.333 было больше, чем 1.22.333? Это другая задача.
Можно тогда всё нормировать к виду
011001333 и 001022333, например, а дальше уже сравнивать. Но при этом мы закладываемся, что размер подстроки не больше трёх цифр.
Не ясна твоя задача.
спасибо разобрался.
Тогда в чём проблема взять ''.join(s.split('.')[:3]) ?
Ну ты меня напугал, конечно, тз вроде сформировано, заказчик пока адекватный, главное технарь а не менеджер, договор естественно прочитаю, я прямо сейчас сижу и смотрю тз, составляю план как что выполнять и т.д и понимаю что на деле все проще чем казалось, рест сервис сделать и работу с их сервером асинхронную, пока заказчик на все отвечает, все что нужно типа документаций присылает, пока не вижу проблем, так же мне нравится что есть конкурент и просят упрощенную копию сделать, многие функции вырезаны из тз, а на многие вещи, которые изначально есть в тз я просто говорю этим будет заниматься фронт, я только апишечку сделаю. Гораздо больше геморроя было когда я подписался с тиктоком работать, дропнул спустя 2 недели, заработал копейки сущие, да еще и по итогу ничего не получилось, а тут пока все прозрачно, но спасибо, все же нужно наконец над чем-то серьезным поработать, когда сделаю уж точно не буду вкатывальщиком(хотя бы частично). Алсо меня пугает слово собеседование, скорее просто созвон, чтобы познакомится и еще один в котором я рассказывал как реализовывать буду, все же компания настоящая, у них уже многое есть, типа серверов, баз, сайтов и т.д, поэтому вполне логично что они не будут по приколу рандому деньги отправялть, самое забавное что меня нашли на хабре, который я заполнил быстро ради одного заказа заинтересовавшего меня
>>52652
Спасибо, аноны.
Особенно за ссыль на весь список. Kivy, curses и urwid уже щупал. Как и eel, про который писал изначально. У киви есть расширение с более современными элементами - KivyMD. Но всё таки он больше подходит для мобил.
Вторые два понравились тем, что это собственно не гуи, а туи, обязательно к этому вернусь, когда появится время на пэт-проектики. А про QT я всегда думал, что интерфейс хоть и будет работать, как часы, но выглядеть будет, как на пикче (что уже вот уже буквально скоро может уже смотреться не просто как старьё, но и даже по олдовому круто, как туи лол). Всё таки на HTML+CSS (в списке это eel) красивее всего морда должна получаться по логике, потому что запилить можно в буквальном смысле абсолютно любые кнопки, поля, градиенты и т.д. в конце концов оно конкретно для этого и придумано. Но по списку пробегусь по всему. Еще раз спасибо.
В программировании половина решения - это грамотно сформулированное задание. Вот как только ты сформулируешь логику, что и как в каких случаях должно быть, так сразу будет понятно решение.
А когда логика не ясна, то и решения не может быть.
>>52844
>122333 и 111333
>Да
А нормально, что в случае 12.3.444 и 1.23.444 ты на выходе получишь одинаковое значение 123444?
Если да, то проще всего через сплит-джоины и операции со списком.
m[:3] - это сделать обрезанный список из первых трёх значений
m[:-1] - это сделать обрезанных список без последнего значения
Если у тебя какая-то очень сложная логика, то не делай в одну строчку, оформи функцию, может быть сложную.
Все проблемы решаемы, когда ты понимаешь, что именно тебе решить надо. Может быть тебе вообще не надо всё к инту сводить, а лучше остаться в строках.
Воистину, ищите, да обрящете. Я искал годный гуй для питона под десктоп давно, сейчас вообще пригорело уже, уже почти смирился с тем, что придется повникать в джаваскрипт ненужный, что б делать по красоте. А счастье то было перед носом. Никто не запрещает пилить в киви под дэсктоп! По красоте киви не отличатся от html+css+js. А про анимации в киви я не предполагал, потому что раньше не видел статей на хабре про анимацию. Они может вообще недавно появились. На киви пилят под мобилы в основном, ну я и отмел сразу не вникая, а это блин топчик! Мультиплатформ есть, поддержка есть, версия 2 вышла недавно, брат жив и все такое. Я стопудов определился со своим стулом, если вы понимаете о чем я!
Отбой, нашёл случайно - --pinentry-mode loopback.
Как будто кому-то всрались эти сертификаты, лол.
Это даже скорее минус, сразу показывает тебя генерик вкатышем с фантиками.
Я уже работаю, даже в продакшене поделки работают, но я в одно рыло все делаю. Ну и интересно будет посмотреть как меня "трудоустроят".
Хотя эти корочки, да даже какие-то проекты хуетень. Нарвался на простейшую ошибку с блокировкой multiprocessing.Pipe и не мог понять проблему в течение недели. К такому ни один курс не подготовит. В исходниках кстати видно, что если Pipe(duplex=True), то действительно используется блокировка на запись, если не было чтения. Ну не пиздец ли..
Только сейчас разобрался, спасибо. На входе 12.3.444.22 - всегда три делиметра. Из этого нужно получит 123444 без точек обычным интом.
Я сделал сплит по точкам и джойн листов в строчку кроме последнего (.22) и обернул в int.
Но выглядит как-то нечитаемо для такой простой задачи..
Сам я ни разу не программист, но угодно высшим силам в виде научрука, чтобы я на питоне написал график. Дано джва файла формата .dat, надо сделать красивый график по типу пикрил, и кое-как я сумел. Теперь нужно, чтобы на нём появились точки из второго датасета, в виде, собственно, красных красивых точек. И вот как это сделать - я совершенно не знаю...
Уже писал бота, который в процессе ещё парсит сайт, менеджер паролей, простейший ETL процесс со сбором, трансформацией и выгрузкой в Postgres, голосового помощника
Сама идея петов ради того, чтобы были, мне отвратительна, но надо где-то брать практику
Как ты это сделал?
Никак. Это должна быть мотивация
Берешь и не бросаешь.
А как после его заполнить?
Нужно заполнять по рядам, но хз как сделать, чтобы заполнение подходило для разных размеров массива.
Сделать нужно, как на пике примерно. 4, 5 размер массива
В терминале всё в порядке
Спасибо!
А в чем проблема? Выдаешь токен и все проверяют.
Я бы супер сильно хотел к вам вкатиться. А точнее в IoT. У меня есть работа, с зп все тоже заебись, но я как раз больше аналитик и рп и пару раз был краем на IoT проекта. Это было просто оxуенно - люди приносят реальную пользу и помогают в развитии, в отличии от меня.
Насколько это ссаная затея? Или для этого надо двести лет?
Спасибо за внимание
Я не понял о чём ты.
IoT обычно про некоторую хардварь, которую ты условно вставляешь себе в ботинок и оно считает шаги. Есть systems on a chip способные тащить микропитон, возможно тебе стоит посмотреть на это. Но IoT всё-таки не про питон, питон там просто рядовая отвёртка.
мимо-диван
Как настроить такую, которая будет при запуске каждого тест класса будет заполнять переменную, скажем Count, которая будет запрашиваться из другого метода. Далее, если смотрим if count > 2: делай это, елсе: делай то.
Если тебе это поможет, то даже на работе я постоянно туплю и могу иногда целый день делать какую-то простую вещь. Ну как простую, когда ты с ней разобрался, то уже простую, да.
Охуенно, спасибо тебе огромное.
Бампецкий.
Конечно
Какая хардварь, братюнь? STM32 есть DIY ESP32, есть куча модулей под Arduino или Pi. Придется конечно физику подтянуть да и азы радиоэлектроники, но это херня. Но туда лучше C++ совать, нежели микропитуху, ресурсов то с гулькин нос.
не трави душу. все никак не мог собрать Jinja2 темплейт XMLный, по привычке указал в одном месте attrib1="foo", attrib2="bar" и заебался искать ошибку, а была одна ебучая запятая.
У нормальных фильмов есть нормальная пикча для фона, у говна - заглушки, так вот, как цвет заглушки подбирается, отталкиваясь от постера? Ну не руками же они это делают
Вот еще две пикчи, если хуёво объяснил. Нормальный фильм и говно. У говна цвет заглушки в цвет к постеру всегда. Как этот цвет автоматом подбирается? Типа надо писать неебовый метод какой то по анализу джипега?
Это копия, сохраненная 15 мая 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.