Это копия, сохраненная 6 февраля 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Предыдущий: >>1741714 (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
Нюфани
предлагайте как реорганизовать шапку чтобы она была полезна
какие вопросы вынести в FAQ, какие ссылки дать, какая литература нужна
опытные 300к/нс тоже предлагайте, а то шапка полная хуйня
Раз уж про шапку, то бампану вопрос из прошлого треда
Аноны, недавно книги обновили в шапке, в новых есть Поваренная книга по Докеру, но она за 2015-2016 год, читал кто ее - актуально, или лучше прочитать 2е издание книги от "Ken Cochrane, Jeeva S. Chelladhurai and Neependra K Khare" за 2018 год?
https://www.packtpub.com/free-ebooks/virtualization-and-cloud/docker-cookbook-second-edition/9781788626866
по-моему малому опыту, но уже испытанных на себе граблях:
1) refactoring.guru добавь. На торрентах есть его 600 рублевая книжка.
2) вот эту хуйню https://pythonawesome.com/
и вот эту https://github.com/vinta/awesome-python
3) https://github.com/aio-libs
https://github.com/MagicStack/uvloop
вот эту хуйню для вкатывальщиков в asyncio
4) Ну прям разжевали и положили
https://medium.com/python-features
ну и ссылки на dev.to, dbader.org. Очень годно пишет, есть платные книги естественно.
На чем пилить? Если б был свой кастомный crud, то все по хуйне, а так с вк взаимодействовать придется
OAuth есть везде.
Ты про это говорил?
https://github.com/python273/vk_api
Какой у них стек сейчас на том и пили, ящитаю.
https://pastebin.com/WszHK8yk
Вот тут написано, что было найдено в аналогичных скриптах, где вводится цветом. >>1751660 → Вся сложность в том, чтобы задать всю эту строчку, как переменную и просто присвоить ей цвет, как я понял.
Поставь colorama и не еби мозг.
print(f'\x1b[0;33;40mss://{encoded_uri.decode('utf-8')}{add}\x1b[0m')
Мне с format как-то приятнее в {} заключаются переменные
И гуглишь ты ооооочень хуево https://stackoverflow.com/questions/287871/how-to-print-colored-text-in-python
Да какая-то куча трейсбеков при попытке это дело просто поднять. Хз какой host и port параметр указывать: 127.0.0.1/8080, 0.0.0.0/8080, localhost/81, ничего не подходит, я эти параметры минут 30 перебирал. А трейсбек один и тот же:
File "uvloop/loop.pyx", line 1879, in create_connection
File "uvloop/loop.pyx", line 1858, in uvloop.loop.Loop.create_connection
ConnectionRefusedError: [Errno 111] Connection refused
Я уже по всем фреймворкам и кейвордам загуглил. Потом пошел, достал ноутбук с 20.04 убунтой, как и версия wsl: все запустилось. Как он может connection refused к локалхосту выводить?
Да так можно вечно перебирать. Ладно, спасибо за помощь, хуй знает, это наверное в фреймворках какая-то проблема, есть какие-то особенности в их работе шо их в WSL не запустить, так как python3 -m http.server поднимает спокойно 0.0.0.0/8000 в терминале.
Джанго и немного фласка у них. Но им вроде как похуй на мой выбор
Прост для питона есть ебалион oauth2 либ, каждой твари по паре, может кто уже пилил подобное, интересно на чем легче будет
А у тебя какая версия? WSL2? В WSL1 вроде танцы с бубнами были для прокидывания localhost
Нет. Это DIY фреймворк. Ещё тебе background tasks самому делать, Pydantic прикручивать и OpenAPI(Swagger). Смысл есть если именно под себя будешь пилить.
Она уже идёт из коробки с Джанго.
Вторая, но я до этого делал даунгрейд и пробовал на WSL 1.
>Смысл есть если именно под себя будешь пилить.
А, то есть если я хочу вспонить как все это делается или научится, то в самый раз
Делаешь инициализирующую функцию где выбираешь радномно время запуска по какому нибудь промежутку юникстайма на конкретный день или как тебе хочется и формируешь таски. Потом берешь кронолибу, которая бы формировала таски в инициализирующей функции по указанному времени.
while True:
if 0 < datetime.now().hour < 4:
# do
time.sleep(random.randomrange(0, 10, 1)
time.sleep(random.randomrange(0,10, 1)
Запускаешь скрипт и по проверке работает рутина, либо крон.
Вспомнить что? Байтоебство? Тебе шашечки или ехать? Если ехать, то бери фреймворк готовый, если хочешь бенчами мериться и майнтейнить проект то aiohttp.
Я другой нюфак в питоне и вообще программировании: а как работают while true функции? Как часто они проходят этот цикл? Сколько раз в минуту, например? Или они так не работают?
Бесконечный цикл. time.sleep(2) заставляет приостановить выполнение на 2 секунды.
Напиши
while True:
print("Gvido was not right about switch statement")
time.sleep(1)
И потом попробуй другие значения. Выход из скрипта ctrl+c
Сколько получится.
В старых играх считали время длинными циклами и потом они летали, как появились более быстрые процессоры, лол.
print(request.full_path)
или
print(request.args)
Он херню печатает:
/?
ImmutableMultiDict([])
Сам метод init тоже что ли надо указывать как async?
---
Немного переделал, все работает, но правильно ли? Хз.
Вызов create_new_game тоже должен выглядть game = await create_new_game() ?
Так же экспериментально было установлено, что в load_questions нужна инструкия return, иначе будет None в переменной, по почему так? await f.read() ведь должен не только возвращать упревление, но и значение, разве нет?
В инит функцию пихать некомильфо. Возвращает же questions.
В if __name__== 'main':
loop = asyncio.get_event_loop()
game = Game(*args)
loop.run_until_complete(game.load_questions())
,А что вообще должно быть? Aiofiles иногда медленнее отрабатывает чем синхронная. Бывает и такое.
Так работают т.н. SPA-сайты. Логика и интерфейсы на клиенте, на сервер ходят только за данными.
Можно повторять эти запросы, можно рендерить страницы каким-то селениумом и грабить готовые.
Я хз, что ты хочешь сделать.
А ваще бери nginx и njs для парсинга. Один хуй в проде все через проксботает. ожет сразу js внедрять. Типо п
Прокси работает. Сразу парсишь запрос и уже идёшь на нужный url, можешь хоть параметры в json перегнать, похуй.
Макака почини ебучую доску
Блин,я неправильно пояснили в реквесте.
У меня два скрипта типа perviy_script.py и vtoroi_script.py. запускаю через консолечку, правый клик в папке python3 perviy_script.py user loh pass pidor ковыряюсь в носу жду, потом правым кликом в другой папке типа python3 vtoroi_script.py linage2_bot_run
И он работает 10 мин и выключается.
Так вот, я хочу это так автоматизировать что бы на ноуте включил, уехал в отпуск а он каждый день это делал вместо меня и в рандомное время типа как человек.
Я так понял рандом должен быть на основе время в системе и вероятности, типа в 16:00 вероятность 50%, в 2часа ночи вероятность 10% и при позитвном отклике вероятности добавить рандомно от 1 до 30 минут к началу запуска что бы не было заметно что чётко включает каждый день сразу в 00 минут.
И как это сделать? Я в программировании ноль....
Сразу на фриланс.ру идти? Мне кажется это все просто должно быть и вы напишете мне на халяву или подскажите что и как это безнадежно я пробовал несколько раз в программирование и не получается
Какие там вероятности, блять.
time.sleep(random.randint(1800, 7200))
От полчаса до двух раномная пауза. Потом запускаеешь свои скрипты.
И ставишь в планировщике утром и вечером, например.
Анон ты вчера мне помог определить айпи используя https://api.ipify.org. А можно ли так же вытянуть, что за страна, и вставить, как значение в строчку вывода?
>И гуглишь ты ооооочень хуево
Я это нагугли еще вчера, и нихуя у меня не получилось. Твой код тоже не сработал.
Вот два вывода:
>print('ss://%s' % encoded_uri.decode('utf-8') + add)
>print(f'\x1b[0;33;40mss://{encoded_uri.decode('utf-8')}{add}\x1b[0m')
На всякий случай вот еще раз полный код с твоей последней строчкой https://pastebin.com/4zrpxT99
Анон, ты красавчик! Спасибо тебе большое!
Вот нашёл несколько апи.
https://ipgeolocation.io/
https://ipapi.co/#api
http://ip-api.com/json/?fields=61439
Подскажите код, чтобы вытащил название страны и в переменную ее записал для дальнейшего вывода.
Делаем домашку и лабы ИТТ бесплатно и смс.
Сам делай, даю подсказку: тебе в ответ приходит JSON.
Какую домашку? Я питон в жизни не изучал. Мне просто нужен скрипт, не более. Да и какие домашки, в школе питон что ли проходят? Да и каникулы.
Так и зачем ты тогда сюда обратился? Ты данные можешь и curl получить и распарить строку
b'abcdeg'
А когда перевожу строку с кириллицей:
b'\xd0\xb0\xd0\xb1\xd0\xb2\xd0\xb3\xd0\xb4\xd0\xb5'
почему так нахуй?
Потому что ascii входит в утф-8, а кириллица это мультибайтовая хуйня, энкод которой и дает твой результат.
>>52597
Спасибо вам, запутался из-за того что ожидал что encode() вернет мне строку байтов:
encode('abcde') => 97 98 99 100 101
а он возвращает вообще какой то непонятный объект. Пришлось через for вытаскивать значения байтов.
Может у класса bytes есть какой то метод чтобы получить сами значения байтов?
>Сам метод init тоже что ли надо указывать как async?
Юзай классовые методы типа такого
@classmethod
async def create(cls):
____connect = await create_connect()
____return cls(connect)
Просто выдает принтабельные символы принтабельными, а так представление не имеет значения, может быть хоть так, хоть эдак.
Есть метод hex. Можешь прогонять вручную через list(bytestr).
Ну хуй знает. Тебе ещё тонну handler'ов писать и в продакшен ты его никогда не запустишь. Видел недавно поломанную conda с сервисом на twisted. Ну охуеть чо, что-то лазили менять в API и все слетело
>>52586
Я блять с пока с этими ебаными кодировками разбирался, реально себя контактером почувствовал.
https://www.youtube.com/watch?v=RirqnBUQTEU
А хотя похуй, как у тебя тоже можно. Чёт вспомнил ws.prepare из aiohttp
Это непростая тема и мало кто-то в ней действительно разбирается, в основном нужен какой-то злоебучий проект с этим связанный, чтобы влезть туда и таки прохвать чо почем.
>>52138
Не нашел где скачать.
>>52140
Купил у него, если нужнен еще и русский - отпишитесь. https://ln2.sync.com/dl/c7d765e30/24666ji3-pdcyibnd-eyi4drny-97gq4y8m
>Не нашел где скачать.
Хз как правильнее будет скинуть но вот https://dropmefiles.com/MB8Uy
Сравнить с первой не могу, т.к. первую не читал, но пока половину этой прочел - в принципе неплохо, если до этого с докером не работал, наверное, даже совсем неплохо будет. Подробные примеры, картинки, команды дает как легаси (которые почти во всех источниках), так и новые
Скачал, скоро залью.
Пробежался по оглавлению и книге - выглядит неплохо, пойдет для в ката в докер, вместо листания документации и гугления. На первых парах, есесно.
Пакт довольно стремная контора, я бы от них смотрел в последнюю очередь.
Хотя и там бывает годнота, потому что берут всё подряд.
some_object.name = "Some Name"
?
Потом метод .save или ему подобный надо вызывать?
Типа если я от админа в консоли cmd напишу pip install хуйнянейм, а потом из под юзера запущу питон, то он напишет, что модуля хуйнянейм нет. И приходится запускать питон от админа.
Пять минут в гугле ничего не нашел для винды.
Хелп.
Ну ты общую директорию возьми ёпт, у каждого юзера должен быть прописан PYTHONPATH соответствующий.
Хотя я бы сразу на venv садился, ибо нехуй
Привет аноны!
Подскажите, пожалуйста, материал по сериалайзерам джанго, не могу понять как собрать ответ вида
{user1:{phone1,phone2},user2:{phone4,phone6}}
из двух таблиц пользователи и телефоны.
iter и next
А вот как ограничить набор телефонов по какому то префиксу я не нашел :(
Подскажите пожалуйста
Это для ДРФ что ли? Можешь модифицировать get_queryset у вьюхи, чтобы выдавала нужные телефоны
На сколько я понял глядя в доку по get_queryset этим фильтром мы уберем только в начальном сете данных что нам не нравится, в смысле получится отфильтровать имена. Может ошибаюсь.
Нашел для "вложенных" данных способ фильтровать https://stackoverflow.com/questions/28163556/how-do-you-filter-a-nested-serializer-in-django-rest-framework
Не знал про Пакт, просто искал есть ли новое издание кукбука из шапки, думал мб по аналогии с питоновским кукбуком будет что-то интересное, а в итоге просто неплохая книжка для тех кто с докером не работал, с картинками, объяснениями, ссылками на документацию
Не могу, т.к. у меня остальной скрипт на питоне. Тебе сложно написать несколько строчек решения?
>>52582
Не понял что это за скрипт? Ты в нем прописал айпи. Мне лишь надо, чтобы на впске, когда мой скрипт на питоне запускается, то он тащил в скрипт айпи + название страны.
С айпи мне помогли. По сути мне нужно, чтобы добавлялась еще одна переменная в строку вывода, а именно страна. Анон, будь аноном, помоги анону!
https://pastebin.com/4zrpxT99 (страна должна в конце строки добавится, как #country (диез в этом случае обязательная часть, которая в итоговой строчке даст понять, что это страна)
override_settings не работает с пайтестом.
Пач django.conf.settings ничего не даёт.
Всё что нужно - добавить в сеттингс один атрибут на время теста
Редактор spacemacs, тема spacemacs dark
Тебя что не устраивает? Переменную объявил просто так.
Ты голову то включай. Посмотри API сервиса.
Pandas
есть такая дрочильня - redash.io . начни с нее. но она какая-то примитивная.
Или тебя заставляют именно в power bi разобраться? А там теперь есть встроенный питон? И сколько в итоге это будет стоить заказчику?
Подбросили тестовое:
Реализовать демон, который предоставит HTTP API для загрузки, скачивания и удаления файлов
- получив файл от клиента, демон возвращает в отдельном поле http
response хэш загруженного файла
- демон сохраняет файл на диск в следующую структуру каталогов:
store/ab/abcdef12345... где в конце - хеш
Удаление и доступ к файлам осуществляются по этому хешу конечно же.
На чем пилить? В смысле - я б навалял подобное на Django но тут нужен "демон", че делать?
Смотря на какую это позицию.
Никто не будет против если ты выдашь в результате Dockerfile.
Но может там веб-макакинг?
Ебать халява. Это откуда такое прилетело?
Это IO-bound, делай на aiohttp+aiofiles, если умеешь.
Линух Дебиан канешн. Какая ж еще?
Под демоном скорее всего имеется ввиду обычный веб сервер (запускаемый через sudo service)
>>53619
С докером я на вы
>>53620
Все что я делал на этих асинхронках это парсил разные сурсы и записывал инфу на драйв. Мне джангоближе
Хз кстати что делать с "хешем". Я б просто uuid намутил и хрен с ним
1. Ну systemd тогда вот тебе и демон
2. Хэш позволить определить целостность файла, может это подразумевалось?
Скорее всего предполагается, что хеш от содержимого файла даст его уникальное имя. Это будет работать как дедупликация: если много юзеров будут грузить одну и ту же смищную картинку, то система не будет дублировать ее данные, а зальет ее только один раз. Если взять от хеша первые несколько символов, то ты можешь создать подкаталог, в который положишь сам файл. Это нужно потому, что файловые системы обычно хуево переживают миллион файлов в одном каталоге. В каждый из подкаталогов будет падать примерно одинаковое количество файлов с хеш-именами, потому что каждая часть хеша имеет линейное вероятностное распределение.
В общем, твоя задача в том, чтобы получать файл, хешировать его и класть на диск с хеш-именем. import hashlib в зубы и вперед.
Но я бы отдельно заметил - и это был бы хороший знак для проверяющих, что голова у тебя в принципе варит - что этот демон не имеет никакого практического применения, кроме тестового.
1) Тебе нужно место, в которое ты будешь грузить файлы. Если ты данные в памяти на время загрузки, то есть шанс, что вся твоя память будет быстро засрана при большой нагрузке, когда куча юзеров захочет одновременно сложить свои файлы. Надо класть данные на диск во время передачи, а потом от этого уже считать хеш.
2) Хоть задача передачи и складывания файлов является IO-зависимой, подсчет хешей будет CPU-зависимым, так что при одновременно загружаемом большом числе маленьких файлов или меньшем числе больших, система встанет раком из-за подсчетов.
Можешь сказать, что при неизвестном профиле нагрузки имеет смысл попилить задачу на две части: один демон будет принимать и складывать вообще все файлы на диск под временными именами, а второй демон будет просыпаться при определенных условиях (при достижении какого-то количества файлов >>И<< раз в несколько минут), чтобы прохешировать и дедуплицировать данные. При этом задачу именования файлов следует тоже разделить на две части: давать файлам имена по уидам, возвращать юзеру этот уид, а потом, когда хеш будет посчитан, сделать какие-то пометки в какой-нибудь бд про соотношения уида и содержимого.
Скорее всего предполагается, что хеш от содержимого файла даст его уникальное имя. Это будет работать как дедупликация: если много юзеров будут грузить одну и ту же смищную картинку, то система не будет дублировать ее данные, а зальет ее только один раз. Если взять от хеша первые несколько символов, то ты можешь создать подкаталог, в который положишь сам файл. Это нужно потому, что файловые системы обычно хуево переживают миллион файлов в одном каталоге. В каждый из подкаталогов будет падать примерно одинаковое количество файлов с хеш-именами, потому что каждая часть хеша имеет линейное вероятностное распределение.
В общем, твоя задача в том, чтобы получать файл, хешировать его и класть на диск с хеш-именем. import hashlib в зубы и вперед.
Но я бы отдельно заметил - и это был бы хороший знак для проверяющих, что голова у тебя в принципе варит - что этот демон не имеет никакого практического применения, кроме тестового.
1) Тебе нужно место, в которое ты будешь грузить файлы. Если ты данные в памяти на время загрузки, то есть шанс, что вся твоя память будет быстро засрана при большой нагрузке, когда куча юзеров захочет одновременно сложить свои файлы. Надо класть данные на диск во время передачи, а потом от этого уже считать хеш.
2) Хоть задача передачи и складывания файлов является IO-зависимой, подсчет хешей будет CPU-зависимым, так что при одновременно загружаемом большом числе маленьких файлов или меньшем числе больших, система встанет раком из-за подсчетов.
Можешь сказать, что при неизвестном профиле нагрузки имеет смысл попилить задачу на две части: один демон будет принимать и складывать вообще все файлы на диск под временными именами, а второй демон будет просыпаться при определенных условиях (при достижении какого-то количества файлов >>И<< раз в несколько минут), чтобы прохешировать и дедуплицировать данные. При этом задачу именования файлов следует тоже разделить на две части: давать файлам имена по уидам, возвращать юзеру этот уид, а потом, когда хеш будет посчитан, сделать какие-то пометки в какой-нибудь бд про соотношения уида и содержимого.
Я через supervisor чаще пилил
>>53655
Джун это. На пистоне прогаю около 1.5 лет но о вкате стал задумываться не так давно. Специальность которую я закончил была связана с инфокоммуникациями поэтому бэкграунд по сетям у меня уже был, но на ней ловить нечего, по крайней мере в России
>>53674
Спс, годно
В задании кстати не определено что это за "файлы" и каков их размер
Раз не определено, то пиши в соответствии с ТЗ и приложи к этому пояснительную записку. Скорее всего от тебя ждут именно решения в лоб и будут не слишком рады, если ты начнешь задавать вопросы без решения. А вот показать, что у тебя есть мозг, все-таки стоит.
Ну сейчас массовый перекат на systemd даже LTS, но внутрянка systemd конечно же отличается. Параметры там например сложнее задавать. Я пилил на systemd, так как ubuntu 18.04
Делай /etc/conf.d/blabla с переменными окружения для сервиса и будет тебе счастье. Ну и еще override. Это не сильно отличается от rc.
Хотя systemd, конечно, говно.
Нинада делать возвращение uuid вместо хеша, у нас так в соседнем отделе завалили чувака, который задачу не по ТЗ сделал, хотя все было хорошо
Я же написал, что надо делать по ТЗ и приложить свои комментарии, ну.
В systemd Environment задаётся
>>53797
The hash of a file is the hash of its contents. Metadata such as the file name, timestamps, permissions, etc. have no influence on the hash. Assuming a non-broken cryptographic hash, two files have the same hash if and only if they have the same contents.
Это тот же файл будет. Пропусти I/O операцию в таком случае,не?
Такое можно специально скрафтить, а для реальных юзабельных файлов вряд ли возможно.
1. Выбери виртуальную среду (venv/pyenv/virtualenv)
2. Выбери пакетный менеджер (pip/pipenv)
3. Создай ручками то/это/поправь конфиг
Я что-то не так делаю? Есть ли что-то для яваскрипт-дебилов наподобие рельсов?
Питон учу чтобы перекатиться потом в дэйта сайенс
инбифо: яваскрипт-дебил может перекатиться только нахуй
>1. Выбери виртуальную среду (venv/pyenv/virtualenv)
Чтобы не засирать машину десятками сторонних либ ты делаешь виртуальную среду, при переносе на сервер собрать список нужных либ можно 1 командой, а не вычленять и составлять его самому из всех либ что есть на ПК. Если работал на ноде, считай что с виртуальным складываешь все в node_modules в проекте, а не засираешь папками весь ПК
>2. Выбери пакетный менеджер (pip/pipenv)
Пользуйся пипом и не еби мозги
>3. Создай ручками то/это/поправь конфиг
Все равно все шаблонно идет везде
1. pipenv тебе сразу ее создаст
2. pipenv сразу генерирует зависомсти и версионность пакетов
3. шаблонизируй хуле
Потом через pipenv проще будет разворачивать на проде (так обещают)
Открывать его через open(filename, "rb") норм? Это не дыра в безопасности? И не лишняя ли нагрузка на систему? Есть способы более эффективно сервить файлы в частности в джанго?
> from django.http import FileResponse
>>> response = FileResponse(open('myfile.png', 'rb'))
А где там дыра? Ну так валидируй тип файла имя по regex.
Проверь что это именно имя файла.расширение а не /etc/groups
А что ты хочешь? Если просто так изучаешь, то кури django. Делать свои веб приложение это хотя бы полезно
Читал, что для data science нужна высшая матеша, думал попробовать на ruby, что про него скажешь?
> думал попробовать на ruby
Нахуя.
Для этого есть python и R. По ним больше всего инфы, курсов и тд.
Дата сайенс очень чего в себя включает. Матеша нужная для машинного обучения, после первого курса норм зайдет, а так у тебя мотивации не хватит разобраться, думаю. Лучше тогда кеггл дрочить и уже потом разобраться как оно работает.
Слушайте, можно ли в теории реализовать такую задумку на питон kivy?
Приложение для интервального повторения повторения мат формул, значений тригонометрии, интегралов, возможность добавлять свои формулы, значение. Я использую подобное приложение для изучения инглиша, за месяц бустанул словарный запас от нищих 700 слов до 2.4к в реальности чуть меньше, но не намного.
Насколько сложно написать какого-нибудь несложного бота и что для этого нужно?
while i <= 5:
....try:
........some_fucking_operation()
........break
....except:
........i += 1
750x1058, 1:03
Непонятно, то ли знания ООП и паттернов проектирования страдают, то ли я в принципе не умею в питоню.
Начал писать файловый процессинг с валидацией и шифрованием, тем не менее кажется что мой код - некрасивая, кривая хуйня (костыль).
Чего не хватает, что почитать?
Из этого отрывка не совсем понятно чего ты хочешь добиться.
DRY - по мне так из разряда того, что ты не должен копипастить свой код на разные методы.
Если есть что-то повторяющееся, то выноси в отдельные классы/методы и переиспользуй их.
Поставь tenacity
441x567, 2:35
Почитать пару док по либам, как они работают, и собственно всё.
На первом этапе думаю этого хватит.
Остальные технические нюансы узнаешь в процессе, если они тебе понадобятся.
Про рефакторинг почитать. GoF - refactoring.guru, про "паттерны" через builtin на medium есть примеры.
>Насколько сложно написать какого-нибудь несложного бота
Ровно настолько же, насколько сложного бота ты хочешь написать.
>что для этого нужно?
Чем писать, на чём писать, время чтобы писать, еду и питьё, доступ в интернет (опционально).
Можешь написать жука-спредовика. Мне мой в своё время на пару пива за день наскребал. находил штук 20 полудохлых монет с большим спредом и небольшой активностью, и держал крайние позиции. Не знаю, будет ли сейчас работать. Года 4 назад дело было.
вконце забыл sleep(1)
Смысл в том, чтобы повторять выполнение некоторых операций some_fucking_operation(), если они вернут исключение. Операции могут быть разные в разных мястах, и для каждой строки такую обвязку писать неправильно. А штатного метода типа декоратора @repeat(5) для отдельной строки кода не нашел.
660x720, 1:46
Паттерны с guru и брал , в принципе, там классно описано, мне нравится.
Знаешь, такое чувство, что в коде слишком много императивщины.
Я пытаюсь прикрутить объекты, но основной каркас получается как последовательность инструкций - это так у всех, или только у меня?
Собственно я один на проекте и подчерпнуть знания не у кого особо.
Листаю гит, смотрю как опытные дядьки делают, но чет не особо выходит, как по мне.
Один из вопросов конфигурации - жескто волнует.
Вот у меня есть yaml файл конфигов, как мне заебись описать структуру таким образом, чтобы у меня все поля были описаны по типу гошной структуры.
Типо если я напишу:
class Config:
class DataSource:
url: str
username: str
password: str
...
а потом прочитаю yaml файл с помощью pyyaml, и запишу в поля класса, это нормально будет?
не хочется юзать простой словарь - там не понятно какие ключи есть, а каких нет
1280x720, 2:47
Может у тебя изначальный поход немного не тот?
Зачем тебе повторять некоторые операции несколько раз подряд.
Если это решение каких-то проблем с сетью, то ты можешь на более низком уровне абстракции эти репиты сделать, а потом во всех high level методах переиспользовать один метод, который будет репитить операцию, если не получил ответ например.
Ну пусть будет деление на n, где n - случайное число, или работа с файлом, который может быть занят, или таймаут какой-нибудь, да тысячи применений, а метод по сути универсальный.
Вот тоже интересно. Без фильтра по дате в поисковике уже никуда, времена такие. Но всё равно этого мало.
Как мне задать множество чисел, например множество K от 1010 до 1020, при этом не храня все промежуточные значения?
>Как мне задать множество чисел, например множество K от 1010 до 1020, при этом не храня все промежуточные значения?
Через генераторы же: range(10^10, 10^20). Значения будут вычисляться по мере надобности.
Допустим, мне требуется проверить принадлежность объекта к заданным большим множествам
Можно сделать класс и в нем реализовать метод __contains__, тогда можно будет проверять через n in obj.
lst = ['Samsung', 'Apple', 'Sony', 'Nokia', 'HTC','Xiaomi']
def avg(lst):
for i in lst:
if i in lst:
return sum(len(i)/float(len(i)))
avg(lst)
Я для любой технологии собираю книжки формата cookbook.
Читаешь оглавление. Примерно запоминаешь что такие то классы задач описаны и потом при необходимости вчитываешься.
Конечно, они имеют тенденцию устаревать. Но можно же с нее начинать. Там точно отфильтрована масса.
Эта в 2013 написана :
Python. Книга рецептов / пер. с анг. Б. В. Уварова. – М.: ДМК Пресс,
и страниц не очень много - 648
Ну а после pip, нужно выработать некое чувство оценки github.
Метрики - звездочки, активность разработчиков, набор открытых и закрытых issues.
Вообще не вижу тут особой проблемы. Поиск новых библиотек так часто у тебя происходит? Со временем ты их все узнаешь и перестанешь беспокоиться.
кстате, программа бомбовая.
ну реально же самый частый вопрос программиста - с фильтром по stackoverflow
Пожалуй ты прав.По твоему варианту вижу что я вообще не то делаю.Спасибо дорогой анон за помощь.Добра тебе няш)
Пробую запустить файст text_name.py через cmd командой pytest -v а он мне PermissionError: [WinError 5] Отказано в доступе
В чем прикол? От имени администратора пробовал запускать, конечно. Дал админу полный доступ к дискам и файлам, не помогает
там же где и про python 2.x - библиотека opencv
но вообще, нынче модно image embeding и облачное зрение.
Загружается в Гугл картинку - получаешь текст описания.
(и продаешь последние штаны чтобы иметь возможность оплачивать счета GCP)
А мне вот интеерсен ход мыслей в твоём варианте. Чисто ради фана.
потому что каждый вложенный список у тебя по-сути является ссылкой на один и тот же объект
Не понял, нихуя. i == 0, это первый список из массива. И я записываею в этот список цифру, почему записывает и в следующий ведь до i == 2 еще не дошло. Схуя ли он лезет в каждый вообще ?
ок буду знать что так можно спс
Только нахуя это делать если так меньше писать ??
Для какого каждого условия ? Если один шаг и каждый список меняется
Да действительно, пздц спс
Терь я осознал твой ответ царский, спс
У меня просто https://myresource.com бесит когда добавляется www и ничего не открывается
Пиздец твою речь читать сложно крч не осилил дальше вопроса
> Двачане, как найти стажировку по путону
читаешь про стеки-хуеки, пробуешь, понимаешь чем хочешь заниматься. Составляешь резюме, смотришь на hh вакансии, рассылаешь по тем которые максимально подходят тому чем ты хочешь заниматься. Первый год работай за символическое бабло в районе 20к-40к, потом можешь перекатываться на человеческую 100к
самое сложное будет не бросить универ на последних курсах
бесплатные стажировки шли нахуй
> как найти стажировку по путону
Джаст гугл ит.
> И сколько времени нужно потратить на получение знания для прохождения стажировки успешного допустим с нуля, хотя не совсем так, ибо в других языках опыта немного есть.
Зависит только от тебя.
> Алсо как питон для спортивного программирования
Медленный, из преимуществ только длинка.
> И если не трудно там около роудмап какой-нибудь мне дебилу.
Джаст гугл ит.
Получается я разобрал свои "сеансы" по фильмам, а как разобрать "сеансы" по фильмам и по кинотеатрам одновременно, чтобы была структура такого вида {фильмы: [фильм1:{названиеФильма, ещеКакиетоДанные, кинотеатры: [ кинотекатр1:{названиеКинотеатра, ещеКакиетоДанные, сеансы: [ сеанс1:{данные1бданные2}]}]}]}
Сори что доёбываю своей шизофазией, но не подскажешь +- набор знаний для успешного прохождения стажировки?
Помогите понять логику того, что надо сделать.
Короче, есть 300-400 одинаковых по структуре эксель файловс разными названиями офк, их надо объединить в один и по нескольким столбцам просуммировать соответствующие ячейки т.е. чтобы в итоговых ячейке С2-С100 была сумма всех С2-С100 из этих файлов.
Какой алгоритм для такой хуйни будет?
>Первый год работай за символическое бабло в районе 20к-40к, потом можешь перекатываться на человеческую 100к
Через год он перекатится максимум на 60, если в ДС.
Бля, я потерял письмо с заданием, которое мне давали для стажировки в мыло. Могу просто покидать вакансии стажировок из телеги, где есть питон
Читаешь по очереди и хранишь-считаешь в структурах, потом в конце пишешь структуру в финальный файл.
А можешь сам канал со стажировками кинуть? А то чёт уже стыдно что так тебя доебал
Ты не сможешь к нему присоединиться, канал приватный и коннектится к нему можно было только тем, кто на курсы от мыла ходил.
А то я почекал со скринов в гугле, вакансий таких нигде нет, так что видимо это пожилая инсайд инфа
Это все этого года вакансии. Просто скорее всего их в открытом доступе нет.
Энивей чел спрашивал про то, что нужно знать для стажировки с питоном.
Я не шарю в питоне. Будь бабло щас, заказал бы у фрилансера этот тупой скрипт. Но на мели. Помоги анон, поделюсь парочкой впсок для впн. Можешь свой поднять или можешь моими шс пользоваться. Просто заебался уже вручную каждый раз делать. Так хоть скрипт будет рутиную работу сокращать.
В идеале еще хочу, чтобы вывод конечной строчки помимо выводил куар прямо в терминал. Опять же примеры нашел, но не ебу
Ну вот я смог нарыть например, как тащить джейсон
>import requests
>response = requests.get("http://ip-api.com/json/")
>response.raise_for_status()
>print(response.json())
А дальше? Как из этого словаря вытащить страну и в переменную его закинуть, чтобы в конечный вывод вывести, включая переменную?
https://pastebin.com/31qJU7Wp
Строчки 16, 22, это то, что я добавил. Я бы от халявной впски не отказался. Пиши в телеге @besteady отвечу, если надо ещё как-то поправить
Рубрика вопросы от ретарда продолжается.
А с какого момента можно считать, что я знаю питон и могу кидать заявку, а то питон как и почти любой другой яп это ебучий океан бесконечного познания и досконально его знать скорее всего нельзя
Только я наркоман. В 22 не нужно было добавлять. Поправил.
> А с какого момента можно считать, что я знаю питон и могу кидать заявку,
Вот тут я кстати не смогу ответить. Но вообще это наверное можно нагуглить, какие вопросы спрашивают на собесах по питону.
Я нахуячил говна и палок во вьюхе перебором 2диктов. И мне стыдно :(
А нет! Не двух, а трех! теперь еще тоскливее.
Не совсем понял структуру моделей, но если судить по примеру с JSON`ом, то делай по возрастающей, сериализатор к сеансу, потом сериализатор к кинотеатрам, в котором поле сеансы сериализуется с помощью прошлого, потом также для фильма.
Я так же размышлял, но видимо мне не хватило мозгов это реализовать. В доке приведен пример где "агрегрирующая" модель(типа сверху json идет из первого ключа к последующим) выводит в себе другую модель.
если провести аналогию, то "альбом"в примере, это мой "кинотеатр", а "трэк" - это "сеанс".
Вот подобное одиночное я могу соорудить, а что-то отличное от доки я сделать не могу. Типа собрать кинотеатры по сеансам, я хз как.
Если подскажите, что гуглить или как делать буду благодарен.
>Вот подобное одиночное я могу соорудить, а что-то отличное от доки я сделать не могу
Так просто сделай одиночное, а потом добавь еще 1 слой, там же в доках показано как сделать их еще и для записи.
>Типа собрать кинотеатры по сеансам, я хз как.
Фильтр по квери параметрам?
Добавь try...except иначе на таймауте или недоступности все будет крашиться. Например глюк DNSresolver или задержки на линии.
Я попадал на такое с aiohttp.
>>54995
Сразу нельзя было сказать? Но на твоем месте я бы попробовал вкатиться в скриптоебство. Просто потому что в следующей реализации что-то поменяется или придется что-то расширить.
Понятно что сейчас у тебя "дедлайн", но так-то азы выкурить легко.
Однако если количество ячеек (т.е. массивы разные по размерам) придется приводить их эталону. Например если массив А имеет 20 элементов, а массив В 18 элементов, то либо ты создаёшь маппинг А['А1':10, 'A3':20]..... B['A1':30, 'A2':10]...., либо считаешь сразу, что если в сводном ячейка есть, а в исходном нет, то добавляешь в массив исходного значение 0 с индексом отсутствующего элемента. Как-то так. Попробуй нарисовать, мне лень.
Это вообще в самом екселе делается спокойно. погугли
openpyxl
открываешь exel файл в pandas, сохраняешь данные в этом файле в отдельный дата фрейм где будут хранится все объединенные файлы, потом открываешь следующий exel файл и конкатинируешь его к тому дата фрейму, потом как нибудь посчитаешь сумму по строчкам или столбцам смотря как тебе надо
Ну допустим у меня есть переменная класса MyClass.counter и она увеличивается при каждом вызову __init__, но как ее уменьшать при удалении?..
Конечно можно сперва прочитать при помощи readlines
Затем удалить элемент по индексу
и получившуюся парашу записать в файл переписав всё содержимое
Может быть знаете вы знаете более изящный способ?
__del__, но переменная != экземпляр, а все передачи значений в питоне идут по ссылкам
можно открыть в режиме a дойти курсором до нужного места и начать с него перезаписывать
сделай в venv такую же версию как и на проде
>Понятно что сейчас у тебя "дедлайн", но так-то азы выкурить легко.
Нет никакого дедлайна. Я для себя это делаю. Просто нехуй заняться, застрял из-за вируса, и без впн нихуя не работает. Заодно и решил настроить скрипт, т.к. пробую разных хостеров и утомился каждый раз вручную прописывать.
>Добавь try...except
Так помоги, добавь. А то может чел выше не увидит.
>>54998
Напишу.
Ах, да, ещё чтобы с ресайзом по минимуму пердолиться пришлось.
PyQT5
дефолтный tkinter
вообще-то, в guizero есть grid. попробуй.
Проблема сверхбыстрых фреймворков, что они частенько оказываются недостаточно полными и ты все равно попадаешь в дыру.
Норм. А че? Там нужно знать питон и статистику в рамках вуза.
Дальше ковыряешь вилкой данные и подносишь на блюдечке настоящему ML-щику.
До нейросеток не допустят еще 5 лет.
https://docs.djangoproject.com/en/3.1/releases/3.1/
Есть вообще существенная разница между деплоем wsgi и asgi приложений? Раньше только с синхронными дело имел
В PEP8 используют, но не для строк - там лучше не надо
print (name + "написал" + book)?
или в каких ситуациях второе используется?
Какая-то госпараша в ДС2, ага
Я вот перекатываюсь тоже с "госслужбы". Концерн Алмаз-Антей, если че. Но тут пока такой хуйни нет
1. Хрюша может просто скипнуть твое резюме без объсянения причин
2. Надо будет выполнить тестовое прежде чем попасть на собес
3. Помимо пистона придется расшарить еще N дисциплин, например базовую настройку серваков, протоколы, sql и nosql бд, линух, докеры (опционально)
>а там апи токен к ip адресу привзан какого-то хера
Епт, регаешь серв, пишешь вебхук на фласке. Problems?
1. при первом вызове функции она создаёт таймер на N секунд и уходит спать или отдаёт контекст.
2. если во время этих N секунд эта функция будет вызвана снова, к таймеру добавятся ещё N секунд.
3. если прошли N секунд и эту функцию никто не вызывал, то она что-то делает, а потом удаляет таймер.
сам я ещё никогда ничего толкового не делал с асинком или потоками, так что не знаю как подойти к этому. возможно есть какой хитрый функционал в стандартной библиотеке, но я не знаю.
>>56301
Ну я и говорю что за бабло. Ок, спасибо. Просто не такая уж важная информация, чтоб за неё платить. Хотел просто попробовать бота написать, а идей не было. Вот подумал типа можно бота сделать, который статистику об игре будет выводить или про кланы.
Хотя вот 2 дня токен не обновлял, а он работает до сих пор.
На хероку можно поднять бесплатную хуитку, но я не уверен, что там будет статический айпи. Можешь попробовать.
А потом можно будет создать класс про кланы и унаследоваться от этого класса и типа к каждому игроку клана применять методы игрока. Я правильно понимаю суть ООП, лел? Ну типа норм в конструктор запихивать запрос, сохранять весь ответ, а потом уже применять к этим данным методы?
>>56287
что-то одна хуйня гуглится
Сорян, хрень какую-то написал. Чего я там наследовать буду, если запрос в конструкторе. Надо будет просто для каждого игрока в клане свой объект создавать и все.
Сразу все поменять сложно, поэтому постепенно делают. Сейчас можно уже в каких-то отдельных вьюхах пробовать мутить, потом ещё че добавят. Так шаг за шагом и релизнуть через год-два
Ты попробуй себя прочитать и понять, что ты написал. Может сам до идей каких дойдёшь.
Как у тебя матрица задана? В каком формате она тебе передаётся? Что ты подразумеваешь под "обойти матрицу"?
Матрица эта таблица NxM. Таблицу можно совершенно по-разному хранить. Это может быть одномерный список, список списков, или ещё что-нибудь. Элементы могут быть совсем разными. Обойти можно граф, но не матрицу, остаётся лишь догадываться, что путь может состоять из соседних ячеек вбок или вверх.
Что такое "кратчайший путь"? Как ты считаешь длину пути, метрика какая?
Вот видишь, сколько вопросов. Если ты ответишь на них, вероятно ты сам решение придумаешь. А пока не ответишь, только гадать остаётся.
Я нахерачил несколько View на джанго rest но это не дает особого понимания работы всего механизма
напиши не на джанго а на werkzeug каком-нибудь
Ээээ, ну можно вот это спиздить например иp Starlette и забыть про Celery
async def coro1():
await asyncio.sleep(5)
async def coro2():
await asyncio.sleep(3)
@app.get('/')
async def asyncio_view(request):
tasks = BackgroundTasks()
tasks.append(coro1)
return Response('Response now and tasks after!', background=tasks)
for a in list:
if a == 1:
do something
continue
elif a == 2:
do something
continue
elif a == 3:
do something
continue
else:
do something
Нужны ли тут continue? У меня программа построена так, что она войдет только в одно условие на каждом проходе цикла, но я хотел еще сделать чтобы она не проверяла на соответствие остальные условия, после того как нашла что хотела. Или питон это сам делает?
если не создаешь копии объектов, то по-хорошему надо.
Какие кстати есть нормальные бэкенд фреймворки для Пистона в 2020 кроме Джанго? Предпочтительно с асинхронностью
Просто смотреть в сети этот лол, по числу звезд на гитхабе например Фласк стоит на 1м месте среди всех питоновских фреймворков, но бля Фласк это ж тупое говно тупого говна
>курс от ВШЭ
Если в этом курсе не было: баз данных, контейнеров, линуха, базовых алгоритмов, TCP/IP, основ борцовской техники и мастер-класса Гордона Рамзи, то курс твой и выеденного яйца не стоит
Вот есть сайт, на котором через время появится кнопка, однако на данный момент ее код отсутствует и появится лишь с обновлением. Возможно ли как-то прописать код для нажатия этой кнопки заранее? То есть прога будет работать и при обнове сайта она находит кнопку и нажимает ее.
Если нет, то вопрос другой - как на Manjaro заставить выдавать звуки? На винде был winsound, тут же не понятно, print('\a') и подобные команды для alert звука не срабатывают. Причем на винде\онлайн компиляторе работает и видимо именно ОС блокирует этот звук
>То есть прога будет работать и при обнове сайта она находит кнопку и нажимает ее
Исполняемый код внутрь <script> засунуть?..
А как я буду обращаться к кнопке если не знаю ее id? Идея вообще была, что селениум открывает браузер и находит ее, только как все это реализуется без знания того как будет выглядеть код кнопки не ясно
Питон для бэкэнда самое то.
Самый "взрослый" это FastAPI. Нагрузили всем необходимым, но можно и на Starlette делать (FastAPI на его основе сделан).
Sanic вроде как ещё быстрее, но количество issues удручает. Aiohttp нормальный такой скелет для создания своего фреймворка.
Да и погуглить можно python3 asyncio web.
У FastAPI и Sanic ооочень годная документация. У FastAPI есть свой CookieCutter образ как для Django.
В комплекте FastaAPI+VueJS.
Как запускаться: Linux, так как uvloop на шиндоус не завезли и uvicorn дропает поддержку IOCP + nginx + gunicorn + uvicorn + starlette/fastapi.
Nginx идёт с поддержкой JS внутри, так что дохуя можно и там валидировать или же изменять запросы на сам бэк. Gunicorn это WSGI, а uvicorn ASGI и занимается как раз uvloop петлей и другой логикой для асинхронного фреймворка. Вот так на пальцах.
Для ORM GINO или peewee.
>Nginx идёт с поддержкой JS внутри,
это какой-то новодел для пидоров.
nginx идет с поддержкой lua .
Кривой. Есть peewee-async. GINO пока только postgres поддерживает, хотя это самый адекватный вариант. Tortoise ORM двигается медленно (сука, каламбур) в версиях, но поддерживает все SQL кроме корпоративных и хочет взять лавры SQLAlchemy но в асинхронке.
В peewee хоть связи объектов нормально можно выстроить.
Как вариант... Возможно. Вообще перекат на GraphQL и тогда похуй на все.
> GraphQL
мне оч нравится он идеологически, но вот писать эти query резолверы выглядит как шаг назад по сравнению с пайдентик+фастапи.
Если есть опыт, то не подскажешь чего годного погуглить чтобы сделать графкл апи?
Как по мне вещь годная. Сразу шлак отсеиваешь или статикой отвечаешь. return 202/204 например (inb4 никто не смотрит статус коды)
Сам пока ковыряю, на FastAPI есть документация или была.
Я только по документации учу. Ещё issues смотрю, там часто решения проскакивают.
Совсем FastAPI не зашел, ну его нахуй. Aiohttp/falcon/flask - ван лав.
Gino это отдельный пиздец, мне иногда казалось, что это говно нихуя не продакшен-рэди.
На практике же оказалось, что ебучие 20-30рпс с жсоном, фласк держит збс, как и ФастАПИ, а ебли меньше.
Да, фласк проц грузит больше, но в пределах разумного, железо одно и тоже.
Мимодругойанон
Вопрос знатокам:
Какие реальные задачи помогает решить использование асинхронного веб-фреймворка, в отличие от синхронного?
Там черт ногу сломает
>мне оч нравится он идеологически,
Переизобретение SQL для джаваскриптодебилов?
чем? это же полностью ебанутая хуйня, которая со временем пройдет
"GraphQL заменит REST точно так же как MongoDB заменил Postgres"
Не помню на память, какая нормальная форма о чём, но все они о том, чтобы избежать дублирования данных, чтобы не хранить те данные, которые можно получить из других.
Это здраво в академическом плане, решает проблему синхронизации данных при изменении, конфликты соответствующие и т.п., но мягко говоря не практично, когда надо лезть в десяток зависимостей ради получения каких-то данных, когда нельзя кешировать, делать агрегаторы и т.п. Ну бред.
Надо хорошо понимать все плюсы и минусы, та вещь, которую в теории надо знать. Академическая наука.
Все эти GraphQL... Красивая идея, но реально ведь масса проблем с перерасходом ресурсов, с безопасностью и другим. Конечно круто, что пользователь может запросить любые данные, но за каждым запросом стоят ресурсы по его обработке, возможные оптимизации запросов, права доступа и т.п. В итоге получается, что просто нельзя позволять произвольный доступ к данным, надо втыкать костыли и оптимизации. В мечты о вселенском счастье начинают приходить проблемы реальной жизни.
А ты ждешь что если нумерация 1., а не 0., то это готовое к продакшену?
>Совсем FastAPI не зашел
Ну хуй знает. А что именно не так? Он под влиянием Джанго и Фласки же создавался.
>На практике же оказалось, что ебучие 20-30рпс с жсоном, фласк держит збс, как и ФастАПИ
Это даже нагрузкой нельзя считать.
>Да, фласк проц грузит больше, но в пределах разумного, железо одно и тоже.
А что там у тебя такое CPU bound? Asyncio это же вообще про другое.
>>57455
Я тоже так считал.
As a general rule, you probably want to:
Run uvicorn --reload from the command line for local development.
Run gunicorn -k uvicorn.workers.UvicornWorker for production.
Additionally run behind Nginx for self-hosted deployments.
Finally, run everything behind a CDN for caching support, and serious DDOS protection.
Сами разрабы так советуют. В принципе uvicorn за nginx reverse-proxy нормально работает.
https://www.starlette.io/background/
https://flask.palletsprojects.com/en/1.1.x/patterns/celery/
Вся разница по сути. Ну или если хреновый вариант (почему я смотрю в сторону GraphQL) и для выдачи результата нужен запрос в несколько БД (MySQL, PostgreSQL/Redis), то можно их выполнить таким образом
async def get_from_rdbs(id):
data = .... # коннектимся и получаем результат, надо делать обработчики ошибок и прерванного коннекта
return id, data
async def get_from_memory_db(id):
data=.... # то же самое
async def log_operation(log_data:str):
# пишем асинхронным логгером запись, что были запрошены данные тогда-то и тогда, можно ошибки записать сюда
@app.get('/user/{id}')
async get_user_by_id(id):
tasks = BackgroundTasks()
tasks.add_tasks(log_operation('Requested data of user ID {id}')
gathering_tasks = []
gathering_tasks.append(get_from_rdbs(id)
gathering_tasks.append(get_from_memory_db(id)
rdbs_result, memorydb_result = await asyncio.gather(*tasks)
return JSONResponse({'SQL':rdbs_result, 'Redis':memorydb_result}, background=tasks)
Сначала ответ, потом логирование. Возможно Celery в этом плане лучше, так как в pending tasks в таком случае ничего бы не было. А так добавился таск логирования.
Используем асинхронные библиотеки чтобы не блокировало asyncio loop. SQLAlchemy сразу на выброс
https://www.starlette.io/background/
https://flask.palletsprojects.com/en/1.1.x/patterns/celery/
Вся разница по сути. Ну или если хреновый вариант (почему я смотрю в сторону GraphQL) и для выдачи результата нужен запрос в несколько БД (MySQL, PostgreSQL/Redis), то можно их выполнить таким образом
async def get_from_rdbs(id):
data = .... # коннектимся и получаем результат, надо делать обработчики ошибок и прерванного коннекта
return id, data
async def get_from_memory_db(id):
data=.... # то же самое
async def log_operation(log_data:str):
# пишем асинхронным логгером запись, что были запрошены данные тогда-то и тогда, можно ошибки записать сюда
@app.get('/user/{id}')
async get_user_by_id(id):
tasks = BackgroundTasks()
tasks.add_tasks(log_operation('Requested data of user ID {id}')
gathering_tasks = []
gathering_tasks.append(get_from_rdbs(id)
gathering_tasks.append(get_from_memory_db(id)
rdbs_result, memorydb_result = await asyncio.gather(*tasks)
return JSONResponse({'SQL':rdbs_result, 'Redis':memorydb_result}, background=tasks)
Сначала ответ, потом логирование. Возможно Celery в этом плане лучше, так как в pending tasks в таком случае ничего бы не было. А так добавился таск логирования.
Используем асинхронные библиотеки чтобы не блокировало asyncio loop. SQLAlchemy сразу на выброс
Мда, ну такое себе, спасибо, антош.
>>57530
> А ты ждешь что если нумерация 1., а не 0., то это готовое к продакшену?
Тогда не понимаю чому ты ее тут указал, она ж не готова для спокойного запуска и работы.
peewee неплоха, но чот непривычно после алхимии.
АсинкПГ норм, но привязка к постгресу не всем подходит.
> >Совсем FastAPI не зашел
> Ну хуй знает. А что именно не так? Он под влиянием Джанго и Фласки же создавался.
Под влиянием то да, как-то жерез жопу сделано, как по мне.
> >На практике же оказалось, что ебучие 20-30рпс с жсоном, фласк держит збс, как и ФастАПИ
> Это даже нагрузкой нельзя считать.
Можно. Во-первых это не малые значения, во-вторых каждый запрос ещё идёт в бд, что тоже даёт нагрузку.
> >Да, фласк проц грузит больше, но в пределах разумного, железо одно и тоже.
> А что там у тебя такое CPU bound?
> Asyncio это же вообще про другое.
Хм, у меня - ничего, фласк запускаю с uwsgi и он создаёт процессы/потоки, в них идёт обработка запросов, поэтому и потребление ЦПУ возрастает.
>Хм, у меня - ничего, фласк запускаю с uwsgi и он создаёт процессы/потоки, в них идёт обработка запросов, поэтому и потребление ЦПУ возрастает.
Например, у тебя будет по 300-400 запросов в секунду в базу, засирать все процессами/потоками можно только ограниченно. Так же тебе не дадут всемогущий цпу и для оптимизации утилизации ресурсов юзается асинхронность, т.к. все эти 300 запросов можно обрабатывать в одном потоке.
Когда будет пиковая нагрузка в 60%+ по ЦПУ я возьму новый сервер и сделаю балансировку запросов через нжинкс. Она и сейчас есть, но джаст фор фан.
Но суть я уловил.
Для небольших проектов хватает синхронных фреймворков, но опыт работы с асинхронными - жирный плюс.
Ну ты хотел разницу увидеть ASGI/WSGI вот она, а чем асинхронные либы отличаются от обычных тебе >>57574 рассказал.
Если сравнивать треды и корутины, то тут без бенчмарков все ясно, просто посмотри на htop. Даже в idle режиме полный пиздец творится.
>>57592
>Когда будет пиковая нагрузка в 60%+ по ЦПУ
Ну везет, хули. А бывает и так:
перенесли все с Windows 2016 с 2/4 core 4 Gb на писюльку 4/4 (Celeron) с 4Gb, но уже на Linux. Так там охуенно удалось развернуться и въебать Process и разелить логику с монолита на отдельные сервисы. Когда говорил: "а не дешевле ли взять одну хорошую машину и запустить все в Docker" мне сказали что денег не запланировано, баста.
По сути это 10 объектов с такими вот мини серверами. Каждый со своей логикой и задачами.
Ну и вдовесок. Задача такая чтобы логика отрабатывалась именно на локальных серверах, единый йоба сервер нельзя. Нет гарантированного канала связи. В ином случае все бизнес процессы встают колом.
>Когда будет пиковая нагрузка в 60%+ по ЦПУ я возьму новый сервер
А потом тебе девопс говорит, что бы ты шел нахуй и переписывал свой говнокод, т.к. на новый сервис денег не выделили
У фласка/фаст-апи примерно одинаковая скорость разработки
Потому тебе дают фреймворки и инструментарий, чтобы не городить велосипед.
Ты же должен понимать, что если куча данных бизнес-логики хранится в памяти (даже не NoSQL), а просто в виде словарей, объектов тем больше у тебя ресурсов требуется. И не всегда это решение лучше чем чтение с диска или по сети.
Мы таким зарплатную карту прямо в Amazon AWS заводим.
Я вижу два варианта:
Первый, завести хранилище типа etcd и при апдейте делать проверку лока и реджектить запрос. Из минусов я вижу сетевые задержки и новую точку падения.
Второй, делать шардирование по ключу между несколькими инстансами и выполнять их последовательно. Тут минусы в настройке балансировщика (хз даже что тут юзать, на ум только кафка какая нибудь приходит) и более сложная реализация (хотя может и нет, так как никогда такого не делал)
Ясно, понятно, никакой конкретики. А так, я новичок и мне не понятен твой бугурт в мою сторону. Я же не могу понять, хороший ли этот курс или нет, т.к. другого я не видел.
MYSQL LOCK TABLE FOR UPDATE
ахаха блядь.
че за тупые вопросы? Никак они не решают. Проебывают данные.
Как и вся индустрия.
Передаю в Шаблон некий контекст(к примеру 100 записей из Модели запросом Model.objects.all())
Как из шаблона вызвать к примеру - Model.objects.all()[-10]
То есть мне надо 10 последних записей нарисовать в шаблоне циклом
Сервер стоит 5-10-15$.
Если выросла нагрузка == пришли клиенты == получили прибыль. Либо бизнесс одобряет горизонтальное масштабирование и загребание $$$ дальше, либо нахуй.
въебать 1млн$ в безопасность
https://career.habr.com/vacancies/1000060250
>>57902
GINO, peewee-async, tortoise-orm.
А если хуита на палке, то просто пиши statement.
aiomysql, aiopg,...
Если ты пришел с Django я чот разочарован. Настолько привыкли что все out of the box? Прямо отдельная каста, лол.
>Что же рыночек так порешал то
На западе тонны перекатывающихся в веб парашу дата саенсистов/аналитиков /матанофизикохимиков/ебланивших компутер саинтестов и инженеров некуда девать
Для ажахов и подобной хуйни проще подсматривать и повторять запросы, так даже проще.
Исполнять жабаскрипт в большинстве случаев нужно только для всяких челленджей и подобных защитных шняг. Для них тоже можно обойтись без браузера и гонять через ноду.
for i in items:
....if i != items[items.index(i)+1]:
...
Вариант не рабочий, потому что index(i) ищет первое вхождение, а элементы могут повторяться.
Есть мысль завести переменную-счетчик, но не слишком ли это колхоз?
О! Я и забыл про нее. Сознательно старался обходить enumerate, zip и map после того, как узнал про listcomp-ы.
Да, ведь это одно и тоже.
Я когда-то давно пользовал SqlAlchemy, но тогда мне не было никакой нужды в миграциях и версионировании БД...
SQLAlchemy, PonyORM
Если делать как на первом пике, то выдаёт Task was destroyed but it is pending! потому что скрипт выполнился за 1 секунду и таски не успели сделаться(я так понимаю).
На втором пике с костылем в виде слипа всё норм работает.
Как сделать нормально? Уже спать надо, и не могу сообразить к чему тут надо хуй shield приложить
Думай что может блокировать. Полный код выложи
Я не асинхронщик, но что то дофига вопросов. Если у тебя функция мейн асинхронная, то откуда и как ты ее вызываешь? Почему луп создается внутри мейна? Как ты саму функцию мейн в луп положишь? Насколько я знаю, луп ДОЛЖЕН быть только один.
Он же не создаёт луп, а берет активный.
Да и лупов может быть несколько, только луп внутри лупа создать нельзя, на сколько помню, ну или я с трэдами путаю.
Да, виноват
asyncio.create_task(coro, *, name=None)¶
Wrap the coro coroutine into a Task and schedule its execution. Return the Task object.
If name is not None, it is set as the name of the task using Task.set_name().
The task is executed in the loop returned by get_running_loop(), RuntimeError is raised if there is no running loop in current thread.
This function has been added in Python 3.7. Prior to Python 3.7, the low-level asyncio.ensure_future() function can be used instead:
Пробуй так и запускай asyncio.run(main()) в debug=True. Иначе так и будешь гадать.
Loop пока нужен для того чтобы сигналы ловить, asyncio.run без обработчиков идет, но думаю в 3.9 добавят, так как сейчас херня без задач.
>For mapping types, if key is missing (not in the container), KeyError should be raised.
Нашел.
https://www.nginx.com/blog/using-nginx-logging-for-application-performance-monitoring/
Получил такой лог
"23/Jul/2020:10:21:58 +0300" client=5.45.207.108 host=siski.piski.ru method=GET request="GET /big-black-mamas/nedorogo/standartnye HTTP/1.1" request_length=263 status=301 bytes_sent=2234 body_bytes_sent=5 referer=- user_agent="Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" upstream_addr=127.0.0.1:9000 upstream_status=301 request_time=5.021 upstream_response_time=5.021 upstream_connect_time=0.000 upstream_header_time=5.021
Как такой лог эффективно распарсить в pandas ?
Придется построчную читалку на питоне городить или можно раз-раз ?(как и все в пандас)
Там еще какие-то модули в nginx plus есть, но я их не хочу
как в pandas сделать в целом объединение данных из нескольких журнал по "поиску ближайшего соответствия" ?
То есть, у меня есть php fpm access.log, где посчитаны доскольнально cpu time и еще два лога в котором точного идентификатора позволяющего объединить запросы в принципе нет.
Но если смотреть глазами, то понятно какой запрос где. Можно объединить по IP и времени (а по script ptah нельзя, так как там всегда index.php )
Просто время будет отличаться на миллисекунды.
(А может и больше. Иногда сервак может начать тормозить особенно сильно)
def fetch_user():
def decorator(func):
@functools.wraps(func)
def wrapper(user, args, kwargs):
# do smth with user
return func(user, args, kwargs)
return wrapper
return decorator
В таком виде этот декоратор хорошо работает:
@fetch_user()
def foo(user):
pass
А в таком принимает self за user и падает:
class Foo:
@fetch_user()
def bar(self, user):
pass
https://stackoverflow.com/questions/25049667/how-to-generate-a-json-log-from-nginx
В JSON как вариант. Парсер есть нативный.
Везде пишут, что питон хорош для начинающего лоха и что им можно парсить ресурсы.
Или есть что-то более подходящее для моего случая? Кроме хакселя.
Собирать инфу хочу с блогспота, жж, фб, вк, ютуба и т.п.
чето не заработало. у меня не такой новый nginx.
но спасибо за идею. в другой конфигурации попробую json.
Флаг дебага что-то вообще ничего не дал.
Но я всё равно нашел решение кмк - мейн закрывался после того как generator отработал, и ему похуй, что там таски ещё крутятся. Поэтому надо их ждать; добавил это в строчках 17, 18.
код: https://pastebin.com/M149Lpyd
scrapy, документации официальная очень толстенная.
у ВК есть свой API, у ФБ тоже. Я так понимаю как раз защита от ботов коим scrapy и является.
>>58442
Значит в IDE что-то не включил или в environment
There are several ways to enable asyncio debug mode:
Setting the PYTHONASYNCIODEBUG environment variable to 1.
Using the -X dev Python command line option.
Passing debug=True to asyncio.run().
Calling loop.set_debug().
Я так и подумал что ты не ждал таски. Ты mutable объект что ли изменяешь? gather может выплевывать или отрабатывать exception.
Я вот тоже теперь штудирую high level методы для asyncio в Python 3.8, только привык к чему-то уже меняют. Выйдет 3.9 и все по новой блять
Но ты учти что у тебя файлы пиздец какие огромные будут, ротацию делай обязательно или сращу складывай в БД.
Я ничего лучше не придумал как взять для этого Yandex Clickhouse. Клиентов овердохуя, работает по HTTP, есть реализация ORM и asyncio (не ORM).
При том можно брать JSON файл и сразу пихать в таблицу.
Можно вообще нативным клиентом для линуха по Cron отрабатывать
>clickhouse-client -n --query="SET input_format_skip_unknown_fields=1; INSERT INTO event FORMAT JSONEachRow;"
https://github.com/b2wdigital/aiologger
scrapy не для этого, и тем более не для нуба.
>Ты mutable объект что ли изменяешь
Нет, код же прикрепил.
Этот код - подзадача на пути решения другой, которую я придумал.
>Я вот тоже теперь штудирую high level методы для asyncio в Python 3.8, только привык к чему-то уже меняют
Ага, я меняю свой майндсет yield-based корутин на asyncio, и мне пока второе привлекательнее выглядит, более user-friendly.
Разница в том, что запрос идет не сразу на ssd а в сеть. Пока он летит в сети, можно другие задачи исполнять. Даже если бд не поддерживает параллельное исполнение операций и ставит локи на каждый запрос, серваку будет похрен, пока от бд не придет response, он может обслуживать других клиентов
И? Че ты мозги ебешь?
всю дорогу в вебе это срали на это и никогда не писали асинхронно.
Сайты открывались и всем было заебись.
А тут им внезапно в джанге понадобилась асинхронность
Малаца. Разница между БД на localhost и remote какая? Ну latency.
host127.0.0.1The host name or IP address of the MySQL server.
port3306The TCP/IP port of the MySQL server. Must be an integer.
unix_socket The location of the Unix socket file.
На localhost ты через unix_socket что ли коннектишься? Вряд ли.
Ну будет отклик не 0.02мс, а аж 0.1мс если канал не полное дерьмо.
Какая тут разница в реализации если ты абстрагируешься от конкретики? Сейчас БД на локальной ноде, потом хуяк и на ноде в удаленном ДЦ, а у тебя кода заточен под единичный случай.
>На localhost ты через unix_socket что ли коннектишься? Вряд ли.
ахах.
на самом деле в большинстве случаев - да.
ну в стандартной сишной либе mysql это так так работает. волшебное имя.
Учтем что Linux конечно же лучше и надежнее других систем, но unix_socket в отличие от inet_socket сразу же дает ограничения.
Допустим есть кейс, когда надо разнести прложение на составляющие. Возможно нам даже дадут выделенный сервер для БД, а возможно заставят страдать хуйней и паковать вещи и пиздовать на улицу все в контейнеры, которые ну допустим запущены на той же машине. Тогда что? У тебя изоляция сред, вот прокинутый маршрут до контейнера и все. К1: БД#1 К2:БД#2 K3:Бизнес логика К4:Веб хуйня.
И ебись как хочешь. В принципе это и на железе можно и нужно так делать (есть опыт говнокода, который потом со слезами на глазах разносил согласно логики)
что-то я разочаровался в этой ссанине.
дело в том, что pandas.read_csv можно научить засасывать файлы и потом обрабатывать колонки, а js нужно построчно читать.
Не оч. вдохновляет. Как бы загружать именно одной операцией такой файл со строками json ?
Анончики, где кстати можно почитать/посмотреть как с помощью pandas работают с файлами? А то все нахваливают.
А че такого в unix сокетах? Если процесс не общается с сетью а общается лишь с другим процессом то unix_socket маст хэв
Так как же как и с одним файлом. Делаешь glob и в цикле read_excel или еще какой-нибудь read_csv.
Обучалок довольно много, но они все будут про рафинированные датасеты. Нахваливают не работу с файлами, а последующую обработку данных из файлов.
не понимаю как у человека осилившего оба тома Лутца могут еще возникать какие-то вопросы. Ты уже должен был устроиться джуном на 300-й странице
просто ищешь вакансии со стеком на котором бы хотел работать, пробуешься, сосешь, понимаешь что надо подтянуть
можешь на собесах в лоб спрашивать, норм чуваки подскажут, а душные пидоры не нужны
паста там чисто для рофлов и устарела немного уже (гевенты и торнады не такие популярные нынче)
js? нихуя не понял из твоего потока мыслей
df.to_json(orient='split')
'{"columns":["col 1","col 2"],
"index":["row 1","row 2"],
"data":[["a","b"],["c","d"]]}'
pd.read_json(_, orient='split')
col 1 col 2
row 1 a b
row 2 c d
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_json.html
Вообще pandas сразу загружает данные и формирует объекты свои.
>>59198
>Если процесс не общается с сетью
Но надо же тогда предлагать два варианта подключения к сервисам, не?
>>59228
ПОЛУЧАЙ
@
ВАЛИДИРУЙ
Получил аргументы через input, пошел проверил есть ли такой юзер в БД, отдал токен авторизационный например. Хоть в константе напиши
LOGIN ='Abu'
PASSWORD='makaka'
и с ними сверяйся.
js? нихуя не понял из твоего потока мыслей
df.to_json(orient='split')
'{"columns":["col 1","col 2"],
"index":["row 1","row 2"],
"data":[["a","b"],["c","d"]]}'
pd.read_json(_, orient='split')
col 1 col 2
row 1 a b
row 2 c d
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_json.html
Вообще pandas сразу загружает данные и формирует объекты свои.
>>59198
>Если процесс не общается с сетью
Но надо же тогда предлагать два варианта подключения к сервисам, не?
>>59228
ПОЛУЧАЙ
@
ВАЛИДИРУЙ
Получил аргументы через input, пошел проверил есть ли такой юзер в БД, отдал токен авторизационный например. Хоть в константе напиши
LOGIN ='Abu'
PASSWORD='makaka'
и с ними сверяйся.
а , я чет не заметил что в read_json можно передать открытый файл, но имя файла как в read_csv нельзя.
Тогда все ок.
На заре своего долбоебизма (ну хули там память, процессорное время. У меня 6 ядер и 24 гига!) Я пробовал SQLAlchemy + pandas для того чтобы заливать таблицу в MySQL. Это... Пиздец. Вот прям пиздец-пиздец. Объект pandas в памяти оставляет такой слепок, что реально думаешь податься в байтоебство. При том там была таблица xls ну наверное 300х30.
С json боюсь не лучше будет, ну потом сам посмотришь.
У меня просто было 3+Гб логов со всех сервисов за месяц. И тогда уже херово настроенный MySQL захлёбывается.
Зачем внутри логики это делать? И чем тебя unittest не устраивает? Там же и замеришь скорость выполнения.
Дело не в конкретном вызове import time, я про любые импорты сторонних библиотек внутри скоупа функций-декораторов
Меня заинтересовал этот вопрос. Согласно документации отличия есть:
1. У OrderedDict есть методы для изменения порядка в словаре
2. Обычный dict и OrderedDict по разному реализованы: обычный dict эффективно выполняет свои функции как словаря, то есть быстрый поиск элементов, эффективное хранение, и все такое, а поддержка порядка элементов вторична, в свою очередь OrderedDict эффективно осуществляет изменение порядка элементов, а все остальное для него вторично.
3. OrderedDict при операции сравнения учитывает порядок элементов, то есть:
>>> {"a": 1, "b":2} == {"b": 2, "a": 1} #Для обычных словарей порядок не важен
True
>>> OrderedDict({"a": 1, "b":2}) == OrderedDict({"b": 2, "a": 1}) #Для OrderedDict порядок важен
False
>>> OrderedDict({"a": 1, "b":2}) == {"b": 2, "a": 1} #Для OrderedDict и обычного словаря, внезапно, порядок опять не важен
True
4. До версии 3.8 к обычным словарям нельзя было применять reversed
https://docs.python.org/3.8/library/collections.html#ordereddict-objects
Возможно, в каких-то отдаленных версиях обычный словарь и вберет в себя все полезное от OrderedDict, и OrderedDict запретят, ввели же в обыне словари поддержку порядка и reversed, но вот пока свои отличия у них есть
Хороший вопрос.
Реально импорт делается один раз, то есть инициализация модуля происходит один раз, вне зависимости от того, сколько раз и откуда ты этот модуль импортируешь.
При импорте ведь исполняется весь код импортируемого модуля. Он исполнится только один раз.
Надо изучать стандарт, что при этом реально происходит, я имею в виду механизм копирования имён функций в пространство имён, откуда ты импортируешь, но подозреваю, что это просто копирование одной глобальной переменной, объекта-модуля. Соответственно, накладных расходов считай и нет.
Вот у меня есть сайт где переход на следующие страницы осуществляется не в url (типо не site.com/pages/1..2..3), а с помощью js'а. Поэтому я нихуя не могу получить данные на следующей страницу
Как мне получить их? С селениумом не хочу ебаться.
Почему выдаёт ошибку?
Почему если для эксперимента написать print("123", 123, end="")
ошибку не выдаёт?
Подскажите пожалуйста
end параметр для print(), а у тебя объект вообще кортеж.
Нарушение PEP8 да и потом банально такой говнокод сложнее будет читать. Из-за таких вот хуяк-хуяк как хочу так и пишу (camelCase имена переменных и методов) потом вылезают дебильные ошибки.
Я бы накорню такую хуйню запретил. Банальное неуважение к чужому труду.
Пишу опять.
Я понял что можно выполнить жс код в консоле чтобы он передвинул на следующую страницу, а в какой библиотеке я также смогу отправить на сервер выполнение жс кода чтобы он мне прислал новые html данные?
В requests_html такое есть? Исполнять код можно?
А у меня автор книжки советует. "Automate Boring Stuff with Python 3"
Also, в PyCharm какой оптимальный способ пробовать новые хелловорды и прочие учебные примеры? не создавать же каждый раз проект? Но плодить говнофайлы внутри проекта тоже вроде как-то не выход... Советы?
Добавил мидлвеар по инструкции. При каждом обновлении страницы пользователем воздается новая сессия (пик 1).
Кука на клиент не приходит (пик 2).
Чому так?
Ебать. Нашел другой способ сделать. Все, отлично.
Походу, надо самому ложить, все ок, пардон
> Also, в PyCharm какой оптимальный способ пробовать новые хелловорды и прочие учебные примеры? не создавать же каждый раз проект? Но плодить говнофайлы внутри проекта тоже вроде как-то не выход... Советы?
Бамп
плодить говнофайлы внутри говнопроэкта
>>59641
Нахуй стандарты, ведь не запрещено. Много что интерпретатор позволяет, но раз вам нравится говнокод, так и быть.
https://www.python.org/dev/peps/pep-0008/
chapter1 | file1; file2
chapter3 | file1;...
Логически раскидай, если не создаёшь виртуальные среды
У тебя какие-то фантомные боли и широкие выводы по одному неудачному эксперименту.
В целом, охуенно ,pandas , охуенно быстр.
Ведь он использует numpy, а тот байтоебский.
Скорее всего на на 3.8 с обновлением посмотреть. Но всяко pandas это визуализация.
Собственно нашел вариант, но совсем туплю в том как его доработать под свои нужды.Помогите пожалуйста с этим.Сам вариант:
ef longest_entry(lst):
total_entries = len(lst)
current_entry = 0
longest_length = 0
while current_entry < total_entries:
this_entry = len(str(lst[current_entry]))
if int(this_entry) > int(longest_length):
longest_length = this_entry
longest_entry = current_entry
current_entry += 1
return longest_length
320x240, 2:24
https://colab.research.google.com/drive/1DwsBbRiwYnymEePzcNOpWZ8kwk2_EHwg?usp=sharing
Ну вот тебе и ответ, что об этом можно думать. Я бы мог затестить, загрузить трек, но и что дальше. Как мне понять хорошо это получилось или нет, если я не знаю чего я хотел добиться этим.
По модулю на главу или логическую херь. Виртуальная среда оверкилл, можешь для тренировки попробовать
пашшел ты
https://pastebin.com/6vWbFa9n
никак, но можешь попробовать подрочить asyncio.get_event_loop() и asyncio.ensure_task() иногда получается
Если питон 3.7+ то в синхронной функции просто вызываешь асинхронную через asyncio.run()
ImportError: attempted relative import with no known parent package
А также не могу произвести импорт вроде: from myproject.settings import DATABASE_URI - в таком случае он говорит что myproject не существует(No module named 'myproject'), но файл же бля лежит прямо в ней нахуй
if A:
____if B:
________...
____else:
________...
else:
____if B:
________...
____else:
________...
> background tasks самому делать
aiojobs
> Pydantic прикручивать
Так ли это сложно?
> OpenAPI(Swagger)
Тут сыглы, сам немало кода написал. Но там история такая, что библиотек хороших нет, не специфично aiohttp.
Это называется числа с плавающей точкой IEEE 754. Эта хуйня такая прямо в железе, там ограниченное количество бит и бинарное представление, которое не всегда хорошо мапится на десятичное.
Импорты кешируются. Будет быстро.
ГОСТ 7.67
Если у тебя железо с другим стандартом целых чисел, то обосрёшься. Ещё этот оператор можно к своим типам прикручивать, вроде в алхимии есть.
>Это там где ты инит.пу расставил
Сколько времени еще будет жить этот дурацкий стереотип, даже интересно
люди до сих пор class MyClass(object) пишут
тем что люди ориентируются не на действующий порядок импорта, а на свой выдуманный
Поясни, я тебя не понимаю. Какой порядок по твоему мнению выдуманный и неправильный, а какой правильный.
Так бля, я походу в танке. Вот тут рассказывают про дохренища линтеров для кода, но я просто юзаю PyCharm и он мне в подробностях в реальном времени все подсвечивает. Ни разу не юзал эти "линтеры". Что за прикол?
Ну так в пайчарм встроена парочка из этих линтеров. Ты всю жизнь ими считай пользовался, но не знал. Отдельно они особенно нужны если ты хочешь по рукам пиздить ждунов при каждом коммите.
И создал Гвидо Python и стала всем вокруг хорошо
Каждый мог писать код как ему вздумается
И каждый мог вкатиться в ОйТи
И пришли инфоцыгане и стали коммерцией заниматься
На седьмой год взъерепинилось коммьюнити
Негоже говнокодить как вздумается, правила нужны
И создали PEP8 и было радостно программистам
Но горько взрыдали вкатывальщики, не осилили они PEP8
И ересь понесли инфоцыгане выдумав свои правила
Так понятнее?
https://chrisyeh96.github.io/2017/08/08/definitive-guide-python-imports.html
там конкретно о том что изменилось в py3.3 и о том что init теперь необязателен
в последних питонах пакет для импорта - это папка вне зависимостии от наличия инитпу
Ты вообще в курсе для чего эти неймспейсы создавались?
> Namespace packages are designed to support being split across multiple directories (and hence found via multiple sys.path entries)
То есть, пакадж с инитпай находится через sys.path lookup ровно один раз, дальше все его модули и субпакаджи будут фиксированно внутри этого каталога.
Неймспейсы же нужны чтобы ты мог кусками ставить какой-нибудь огроменный пакадж типа zope и чтобы общий инитпай не перетирался при каждой установке и не удалялся при каждом сносе.
К примеру, когда ты делаешь from jopa import govno, если jopa это неймспейс то попробуется целый десяток путей вместо одного: ./jopa/govno.py /usr/lib/python/jopa/govno.py /home/user/.local/lib/python/jopa/govno.py /usr/local/lib/python/jopa/govno.py и далее. И так каждый раз на каждый модуль. Это не простые проходы по файлам у тебя в проектике.
Ну и в целом, ты всегда ограничен sys.path. Нельзя так просто, без привлечения importlib взять любой файл из любого места в системе.
> chrisyeh96
Гайды от зумеров. Кайф.
разговор про init py и что поведение импорта поменялось, а ты про неймспейсы, избежание повторного импорта, zope, сносы, каталоги, пайтонпас
что ты сказать хочешь? какой месседж мне передать?
Да тебе хоть в глаза ссы, всё божья роса. Там почти нихуя не поменялось и инит живее всех живых. Просто добавили возможность зумерам стрелять себе в колено, а они и не против.
> Там почти нихуя не поменялось
ты так думаешь?
> Просто добавили возможность зумерам стрелять себе в колено
а раньше возможностей выстрелить в колено не было?
напомню, разговор о том что инитпу давно не нужен и вопрос антуана был сколько еще эту устаревшую инфу + собственные фантазии вроде
> К примеру, когда ты делаешь from jopa import govno, если jopa это неймспейс то попробуется целый десяток путей вместо одного: ./jopa/govno.py /usr/lib/python/jopa/govno.py /home/user/.local/lib/python/jopa/govno.py /usr/local/lib/python/jopa/govno.py и далее. И так каждый раз на каждый модуль. Это не простые проходы по файлам у тебя в проектике.
буду повторять
гуглишь статью о том как создать бота
выполняешь тоже что и автор
понимаешь че куда
потом делаешь своего бота по аналогии
Окей, если технически тебе мозги вставить нельзя, давай гуманитарно. Найди мне на docs.python.org фразу что инитпу устарел, все срочно перекатываемся на простые каталоги с модулями.
О, начались лавирования. Давай хотя бы что он необязателен, или, цитата, "давно не нужен".
> О, начались лавирования
кек
> Давай хотя бы что он необязателен
в принципе ты мог и сам сходить, хоть бы сам себе технически мозг на место вставил
https://docs.python.org/3/reference/import.html#regular-packages
https://docs.python.org/3/glossary.html#term-namespace-package
package это не то место где ты поставил инитпу
> Давай хотя бы что он необязателен
я тебе дал, ты обосрался
> зачем нужны regular packages, если уже есть namespaced packages
я знаю, а ты сам как думаешь?
как устроена конструкция a, b = b, а
типо меняет ли она с временной переменной или использует йоба алгоритмы типа xor?
ты про это?
> К примеру, когда ты делаешь from jopa import govno, если jopa это неймспейс то попробуется целый десяток путей вместо одного: ./jopa/govno.py /usr/lib/python/jopa/govno.py /home/user/.local/lib/python/jopa/govno.py /usr/local/lib/python/jopa/govno.py и далее. И так каждый раз на каждый модуль. Это не простые проходы по файлам у тебя в проектике.
> Ну и в целом, ты всегда ограничен sys.path. Нельзя так просто, без привлечения importlib взять любой файл из любого места в системе.
так нихуя не объясняет зачем нужен инитпу
вот я и хочу чтобы ты разобрался и эволюционировал из кода в стиле
> import govno
в что-то хорошее
у тебя пытливый ум может быть даже сможешь стать ручным qa когда-нибудь
Нет, ты ещё один пост выше возьми.
> пакадж с инитпай находится через sys.path lookup ровно один раз
Дальше объяснение чем плохо использовать неймспейсы для всего.
> Неймспейсы же нужны чтобы ты мог кусками ставить какой-нибудь огроменный пакадж типа zope и чтобы общий инитпай не перетирался при каждой установке и не удалялся при каждом сносе.
так это полная хуйня, какой инитпай кем перетирается?
> у тебя пытливый ум может быть даже сможешь стать ручным qa когда-нибудь
Ой какой ты смищной. Я уже пуд соли сожрал на импортах вплоть до реализации своего --import-- чтобы сделать сэндбокс не делай так, оно всё равно не безопасно, из банального пустого кортежа можно получить доступ даже к аллаху. Инит расставлять обязательно, кроме случая когда ты знаешь для чего ты его оттуда убрал. Ну можешь ещё в наколеночных проектах не делать, в принципе работать будет, но не более.
> Я уже пуд соли сожрал на импортах вплоть до реализации своего --import-- чтобы сделать сэндбокс
а мог просто прочитать доку
Ну смотри. Делаешь ты отдельные пакеты для СУБпакаджей. Чтобы можно было pip install yoba_core yoba_gui yoba_daemon, но при этом не завозить в систему yoba_sound yoba_render. Вот чтобы эта хрень импортировалась через from yoba import gui тебе, по старой системе нужен yoba/--init--.py. И такой же инит нужно во всех yoba__xxx пакаджах сделать. То есть, пакаджи будут конфликтовать по этому файлу, хотя он может быть у всех одинаковый, в том числе пустой. Когда ты сделаешь pip uninstall yoba_daemon, оно удалит в том числе этот инит, чем сломает уже установленные yoba_core и yoba_gui. Вот для такого случая нужны неймспейсы.
вот это например
https://docs.python.org/3/reference/import.html#regular-packages
https://docs.python.org/3/glossary.html#term-namespace-package
ты же не знал что оно там было
И как мне это поможет сделать сэндбокс, гений? Я в курсе неймспейсов ещё с момента когда приняли пеп.
Гениально. Так и сделаю.
бля, меня жаба задушила хранить гигабайты json.
переделал эту дрочильню опять на простой классический лог запросов с дополнительными колонками
не стоит время программиста такой растраты.
Ну ты можешь банально форматировать строку '/n /r'.
Хорошо когда у тебя формат логов всегда совпадает. Я например записывал request/response в виде JSON, traceback тоже в него выводил.
Как итог были колонки logDateTime (DateTime(, logDate(Date), logLevel(String), logSource(String), logData(String). Партиция была по logDate, logLevel, logSource. В итоге нормально все хранится.
Ну и выводить удобно. Дело вкуса. По-хорошему вообще надо брать готовые инструменты, если ресурсы позволяют.
Меня бы кто научил.
Я пришел в этом в году в этот тред и до сих пор удивляюсь.
Рандомохуи узнавшие про 2+2 претендуют на каких-то жуниоров.
Я в сто раз больше знаю, но боюсь что-то предлагать, потому что не могу себя оценить.
95% постов из серии ололо палка-палка-огуречик-получилось что?
Раз в месяц тут бывают ровные пасаны, от постов которых я чувствую тепло в писечке.
Как стать таким же и заработать мильйон? Все задатки у меня есть, не хвататет пафоса и университетского понимания ебучих формул.
Как стать таким, не ходя в офис к бородачам?
Тут 75% треда из тупых вопросов, возьми какую-нибудь книгу или видеокурс на рутрекере и учи, могу посоветовать "[tceh] Разработчик на Python", там довольно понятно чел объяснял, правда не помню с самых ли основ, и учи, тупые вопросы как и остальные задавай сюда.
>>61140
Ну так попробовал бы сходить на собеседование, анон, вдруг твоих знаний как раз и хватит
Да неудобно задавать тупые вопросы. Было бы проще заплатить по 500 р за урок, чтоб объяснили нормально то, что хочу знать на самом деле. Книги и курсы - пиздец гавно, уровня print("2+2")
if = 4
print("ok")
else
print(not ok)
Это ж пиздец, этому учат по 2 месяца, нахуй оно надо
Я хикка и не хочу не собеседования, но суммы вроде 140к в год меня будоражат. На апворке у меня 15к в год и это более чем для моего мухосранска, а тут в десять раз больше.
А тут ещё масковские ололо-жуниоры набегают в тред со своими зарплатами, вот я и думаю.
Я не знаю на какие курсы и книги ты натыкался, но тот же цех там у него вроде был от основ самого питона до бд, легкого фронта и разных полезных либ.
>Да неудобно задавать тупые вопросы
Анонимная борда, хули тут неудобного. Слишком неудобно - открой приватный режим.
>>61152
>Я хикка и не хочу не собеседования
Многие кампании разрешают работу из дома, прособеседуйся а потом сколько хочешь хиккуй.
Неудобно в том плане, что задать тупой вопрос на борде - получить тупой ответ != уметь/знать. Надо чтоб норм объяснили и показали
Я добрался до разбора байткода различных вариантов, но академичного знания не хватило для разбора сишных исходников.
А так бы я вам доставлял инсайды как всё работает. Этого очень не хватает в среде питонистов.
Задаешь тупой вопрос - получаешь ответ что не так или ссылку на статью где объясняют.
Изучаю алгоритмы и структуры данных на питоне и часто ловлю себя на том, что не могу усидеть на одном месте, когда хочу написать что-нибудь своё или делаю что-то по памяти: появляется какая-то пустота в груди, из-за чего приходится вставать и бездумно ходить по дому или лихорадочно переключаться на вкладку с информационным мусором. Может быть это и не страх, но точно какое-то обеспокоенное чувство.
У меня неудобство в груди, неровное дыхание, напряжение в глазах. Планирую вкатиться на родительскую шею.
Не так страшен черт как его кличут, скорей всего то что ты описал это прокастинация
Конечно, решается просто - ставь перед собой какие-то мини цели, мне помогает. Типо - 1 глава - 20 минут всякой хуеты в инете, хождения и т.д., но сначала именно 1 глава, какой бы скучной она не была.
кликни на "more info" или "подробнее" или че там показывает, и запусти принудительно
Бля неужели 32 битный питон воткнулся при установке?
Деньги есть с основной высокооплачиваемой работы не связанной с IT. 85к они просят не проблема отдать. Хочу наставничества и хорошего обучения азам. Жду совета анона. Всем спасибо.
> желании для начала выучить синтаксис
https://docs.python.org/3/tutorial/index.html
Деньги когда отправишь?
try выполняет блок кода и except'ом ты просто обрабатываешь ожидаемые ошибки ЕКСЕПШЕНЫ, finally выполняешь обязательный блок кода, допустим нужно те обработать логику деления на 0 шобы не пейсать не красивый if пишешь експет ДивБауЗиро и выводишь сообщение
>64, писал и компилировал в минте
Каким образом? У pyinstaller же убрали возможность кросс-компиляции.
ну я тож туда смарел, только не особо понял шо за байт код, есть статья про то как читать это? или всё шо нужно знать так ето стек который грузит все ето?
Нахуй мне еще тут не ответили
Что там смотреть, конструкция вроде a,b = b,a это на самом деле тупли, т.е. (a,b) = (b,a). Производится упаковка и распаковка туплей.
Эх, банят в гугле, ироды
https://www.thepythoncode.com/article/encrypt-decrypt-files-symmetric-python
Ящитаю обязательно к ознакомлению Redis/Memcached MySQL/PostgeSQL, RabbitMQ/Kafka. Иначе когда спросят а как вы реализовывали NoSQL можно будет жиденько обосраться.
Ну и хотя бы раз попробовать Jinja2 Templator и понять что это сука прошлый век и рендерить не на клиенте это моветон.
Какими терминами, братиш? Все гуглится и есть в тех же примерах Django Celery/Redis или Celery/RabbitMQ.
NoSQL даже в педивикии описан.
OLAP и OLTP там же и с примерами.
Хуже чем r/learnpython, пиздец. Пора перекатываться в Go/Julia
>Memcached
Нинужон когда есть редис
>MySQL
Ты кучу раз ошибся в написании "PostgreSQL"
>RabbitMQ
Ты блин Редис сначала освой
>Kafka
Когда будет нужон, тогда и штудируй. А так смысла нет
Ты жопочтец?
Redis как MQ можно использовать, вот только дохуя чего нет в отличие от RabbitMQ.
MySQL ещё много где используется. Миграция на Postgres возможна, но не тебе решать когда это делать и будет ли от этого выгода. Хотя если на галере, то похуй.
Я не говорил о штудировать. Я говорил о том, чтобы посмотреть реальные живые примеры, а не дрочево Automating Boring Stuff. Пощупать библиотеки хотя бы на примерах.
>Портфолио из 6 веб-сервисов.
Вместе они дадут полноценный онлайн-продукт — аналог Netflix
Ну охуеть, то-то они слились в порыве страсти с kinopoiskhd. Я не знаю кто эту хуйню затеял, но на Хабре вполне адекватные посты от хуяндекса бывают. Тут же просто очередной хайптрейн по курсам, ещё и C++ для хайлоад предлагают, а не go (политика, кек).
- Отсутсвие статической типизации - из-за чего нету нормального аутокомплита в ИДЕ, да и вообще писать неприятно(Да, есть аннотации типов, но они работают через одно место)
- Язык медленный
- Многопоточность только для IO
- ООП полное уг (Даже в JS лучше)
- Долбанные __self__, и прочая фигня(Такое даже в C редко встречается)
Так вот, какие у него киллер-фичи за которые вы его любите? У C/C++ наприер - прямой доступ к памяти и скорость работы(при хорошо написанном коде), Java/C# - очень легко писать код, который легко поддерживать(Чистый код так сказать). И так с большинством языков. Помогите найти плюсы, предстоит на нём учить курс Machine Learning а сука так не хочется к этому языку прикасаться - расскажите о нём всё самое красочное, чтобы меня отпустило. Спасибо
> Помогите найти плюсы, предстоит на нём учить курс Machine Learning а сука так не хочется к этому языку прикасаться - расскажите о нём всё самое красочное, чтобы меня отпустило
Детский сад
Тут недавно пробегал жабовик, нахваливал питон и рассказывал, как всё плохо в этих ваших жабах, лол.
Все завязывается на том, как и где ты используешь язык. Можно сколько угодно орать, что Хаскел для тру-мужигов, но количество вакансий говорит об обратном
На Пистоне удобно писать автоматизационные скрипты (часто для линуха), нейронки, управлять кластерами Биг Даты и ебошить микросервисы-апишки (к вопросу "медленности" - тот же FastAPI держится на уровне с Нодой и как правило фреймворк оказывается "медленным" в первую очередь потому что ты делаешь уебанский server-side рендеринг темплейтов или юзаешь неоптимизированные ORM-запросы а не из-за фреймворка как такового, никого не волнует сколько раз за секунду твоя параша может высрать plain text "Hello world")
>предстоит на нём учить курс Machine Learning
Ну так ебошь курс не на Питоне. Ой, погодите-ка, остальные курсы ведь каличное УГ и вакансий для них 1.5 штуки
>из-за чего нету нормального аутокомплита в ИДЕ
В пайчарме все работает, только для своих функций надо использовать type hints. Для локальных переменных внутри функций необязательно.
>Язык медленный
Для большинства задач это не имеет значения, а когда имеет, то для питона есть куча библиотек написанных на крестах. Тот же Numpy работает не медленнее, чем код написанный на C++. В крайнем случае можешь сам написать тяжелый кусок кода на крестах.
>Многопоточность только для IO
Есть multiprocessing, пусть и со своими подводными. Но в целом согласен.
>ООП полное уг (Даже в JS лучше)
Чего конкретно не хватает? Питон не заставляет следовать ООП парадигмам - как хочешь, так и пиши, но для такого языка это наоборот хорошо. Есть множественное наследование вместо интерфейсов как на джаве, что заебись.
>Долбанные __self__, и прочая фигня
Это небольшие придирки.
>Так вот, какие у него киллер-фичи за которые вы его любите
Во-первых, на нем быстрее всего решать задачи, будь то нейронка, веб сайт или небольшая утилита. Если ты пишешь проект самостоятельно и он меньше 10k LOC, то выбирать надо однозначно питон. Для машоба, дата саенса и прототипирования в целом - однозначно питон. Во-вторых, к нему самое большое количество библиотек на все случаи жизни. В-третьих, у него есть REPL и соответственно возможность дописывать код прямо в рантайме.
>Ты кучу раз ошибся в написании "PostgreSQL"
Аноны, объясните, так почему Постгрес, а не Мускул? Видел что все бенчмарки веб-фрейморков питона на нем, но почему именно?
>он меньше 10k LOC
По моему опыту - когда программа становится больше 200 строк, программирование на питоне превращается в боль.
/thread
Я не понимаю этого нытья. Паттерны им показали, используй.
Пук-пук простыня-спагетти. А то что жава превращается в огромный package с abstractshitnumber1.java concreteshitfornumber2.java с им нормально.
1 класс 1 файл. Почему? Нахуй идите, мы так захотели.
Хочешь расширить функционал? Поебись сначала.
Не принадлежит package?
java.shitforproject.interfaces.implementation.huipizda.commercial.govno. Каеф.
Нахуй тут ооп?
Говно какое-то блять. 2 дня пишешь код, потом как мудак ещё 2 дня пишешь тесты и занимаешься хуйнёй с этими ебучими аннотациями, чтобы эта хуйня ошибки сыпать перестала. Ну в рот его ебать, я за аннотации, конечно, но когда они начинают почем зря мозги ебать, нахуй оно надо тогда ёпт?
https://stackoverflow.com/questions/47424245/how-to-download-an-image-with-python-3-selenium-if-the-url-begins-with-blob
предлагают конвертить эту хуйню с помощью выполнения JS-кода драйвером, как-то аккуратнее это сделать нельзя?
blob:https://mangaplus.shueisha.co.jp/927020c2-35df-472a-939b-7793bd2f2f48 - одно из изображений
>>62597
Потому что requests не умеет выполнять ЖС + кликать по кнопкам и прочей хуйне.
Это копия, сохраненная 6 февраля 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.