Этого треда уже нет.
Это копия, сохраненная 13 мая 2022 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Питон тред №128, юбилейный /python/ 2165167 В конец треда | Веб
Юбилейный тред, посвящённый языку программирования Питон, #128

Предыдущий: >>2151231 (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
2 2165371
Какой асинхронный веб фреймворк выбрать?
3 2165407
Ваш язык плохой, мой лучше.
4 2165408
>>165407
Насколько глубоко ты можешь залезть в жопу своим языком?
5 2165522
>>165371
FastAPI только? Остальные какими-то недоделанными выглядят
6 2165549
https://docs.djangoproject.com/en/dev/releases/4.0/ да рот этого казино. Питоны, сижу на второй джанге, лучше на 3 перекатываться или подождать и сразу на четвертую?
7 2165600
Такое кто-то решал?

Тестовое задание: необходимо сделать tcp сервер, который распознаёт заданный формат данных и отображает его в требуемом формате. Обязательна запись данных во внешний файл. Интерфейс и способ отображения на выбор разработчика. Формат данных BBBBxNNxHH:MM:SS.zhqxGGCR Где BBBB - номер участника x - пробельный символ NN - id канала HH - Часы MM - минуты SS - секунды zhq - десятые сотые тысячные GG - номер группы CR - «возврат каретки» (закрывающий символ) Пример данных: 0002 C1 01:13:02.877 00[CR] Выводим «спортсмен, нагрудный номер BBBB прошёл отсечку NN в «время»" до десятых, сотые и тысячные отсекаются. Только для группы 00. Для остальных групп данные не отображаются, но пишутся в лог полностью.
Язык Python, версия не ниже 3.2
Передача данных должна поддерживаться с помощью telnet клиента.
8 2165613
>>165600
Что тут решать, тут только работа со строками.
9 2165733
10 2165810
У меня такая проблемка. Я добавляю конфиг в yaml. Считываю его в global() в config/__init__.py. Так вот, когда делаю
import config
config.TEST_CONF
то в иде подсвечивает, что не знает TEST_CONF, потому что она считана из файла. Как сделать, что он понимал что за конфиг и мог прыгнуть к определению?
11 2165937
Сап. Есть 2 тестовых. Одни хотят что-то с gRPC, а другие с FastAPI. Сделать нужно за выходные. Хочу объединить. Ещё хочу туда рест, микросервисы и асинкио добавить. Но нет идей что делать. Какое-нибудь туду приложение, которое с консольным клиентом по рпц общается, а сам конвертирует в рест и по хттп с соседним приложением общается, которое как раз всю работу с бд делает? Чёт примитивно. Есть что-нибудь, что будет реально получать пользу от использования этих технологий, а не технологии ради технологий
12 2166242
>>165937

>Одни хотят что-то с gRPC, а другие с FastAPI


Что-то? Без конкретных требований? Придумать самому? Я бы не стал там работать
13 2166245
>>165600
Особо делать нечего. Парсить строку через re, дальше простые if-else с логикой.

Задача, как я понимаю, скорее на умение работать с сетью
14 2166261
https://www.youtube.com/watch?v=7KgihdKTWY4

Вот это хохол конечно
15 2166393
Сейчас потихоньку вкатываюсь в питон, и при рефакторинге своего старого кода возник технический вопрос.
Мой код представляет из себя функциональщину, я там форматирую разный текст - нарезать строку, что-нибудь к ней добавить, где-то инвертнуть и т.д. Таких функций у меня несколько подряд, и форматирование в каких-то функциях повторяется, они отличаются только текстом, который надо отформатировать.
Сейчас я переписал это в одну функцию, которая принимает на вход несколько разных текстов, и меня озадачил вопрос - а от этого изменения сам по себе код стал быстрее? Или я просто увеличил читабельность кода, снизив его повторяемость?
16 2166403
>>166393
Timeit в помощь
17 2167050
Подскажите как лучше организовать работу с большими строками:
имеется программа, которая переодически выплевывает клиенту много текста от 10 до 500 символов, таких текстов +- 50
Варианты, которые я рассмотрел:
1) Самый примитивный вариант: иметь файл.py с глобальными переменными, в которых хранятся строки
hello_text = "..."
bye_text = "..."
2) Использовать Enum:
class SomeText(str, Enum):
hello_text: str = "..."
bye_text: str = "..."
Более сложный для редаченья текста вариант, просто юзать import SomeText, можно обращаться по ключу, а не только черз точку, что важно
но постоянно юзать SomeText.hello_text.value ну такое
3) Использовать БД:
слишком заёбистый вариант, хотя можно запилить админку для редактирования обычным человеком
4) Использовать JSON + pydantic:
class Text(BaseModel):
hello_text: str = "..."
bye_text: str = "..."
texts = Text.parse_file("texts.json")
text.hello_text
Более сложный вариант чем Enum, но JSON же проще редактровать обычному человеку чем file.py, да?
Какие ещё варианты есть?
18 2167071
ананасики, что за дела
Пилю простой круд на джанге, подключаю js файл в html документе,
через %static%
Когда загружаю сайт, то получаю код 200 (тобишь файл js получен и все хорошо), как я понимаю
Но сам файл js ни в какую не работает, ни alert, ни вывод в консоль

Хотя если прописываю код в самом документе html через (<script>),
то все ок.
Как это исправить?
19 2167088
Это правда что JavaScript и Python пиздец как похожи?
Я просто недавно вкатываюсь во все это(в универе я вот С++ изучал) и только, что заметил это момент
И вообще что JavaScript - это тупо маркетинговый ход, сам язык к жабе не имеет никакого отношения. Так вот, похожи они это потому что они оба скриптовые или потому, что суть если уж на то пошло все языки похожи.
Ну и еще, если кому не лень, можете пояснить за скриптовые языки, я честно гуглил, ну да читаю вот, да слова и даже смысл понимаю, но вот сути нет.
20 2167097
>>166242
Это галера на проект. В двух разных проектах есть эти технологии, а у меня нет с ними опыта хотя и теорию знаю. Так на собесе и сказал. Интервьюер усомнился, что я справлюсь и хрюша попросила почитать про них и какой-нибудь мини-демо показать, что осилю. А потом его проревьювят. Офер уже выкатили. Осталось проекты показать и они пойдут меня заказчику показывать. Если не справлюсь, то буду другого заказчика ждать
21 2167102
>>167088
Они совсем не похожи.
Есть некоторые тренды, которые популярные языки подхватывают, но не более того.
Всё это было раньше сделано в си, перле и лиспе.
22 2167110
Читаю шо гугл изобрел Go как такая своеобразная альтернатива Петону Гвидо. У го хороший баланс производительности, простоты и безопасности. Зачем же тогда сегодня нужен петон окромя датасаенс?
23 2167123
>>167088

> Это правда что JavaScript и Python пиздец как похожи?


Кто тебе это сказал интересно? Чем они похожи вообще?
24 2167139
>>167050
Нихрена не понятно в твоём техзадании, что тебе надо.

Для хранения данных ещё можно посмотреть на формат yaml, его намного проще редактировать человеку, чем JSON
25 2167142
Сап, почему этот код

for x in range (2):
for y in range (2):
for z in range (2):
for w in range (2):
F = (( not x or y) and (not y or w)) or (z == (x or y))
if not F:
print ( x,y,z,w )

выводит
0 1 0 0
1 0 0 0
1 0 0 1
1 1 0 0
(все верно)
А этот код
for x in range (2):
for y in range (2):
for z in range (2):
for w in range (2):
F = not(( not x or y) and (not y or w)) or (z == (x or y))
if F:
print ( x,y,z,w )
выводит это
0 0 0 0
0 0 0 1
0 1 0 0
0 1 1 0
0 1 1 1
1 0 0 0
1 0 0 1
1 0 1 0
1 0 1 1
1 1 0 0
1 1 1 0
1 1 1 1
Разница ведь в том, что я переместил not на другое место.
25 2167142
Сап, почему этот код

for x in range (2):
for y in range (2):
for z in range (2):
for w in range (2):
F = (( not x or y) and (not y or w)) or (z == (x or y))
if not F:
print ( x,y,z,w )

выводит
0 1 0 0
1 0 0 0
1 0 0 1
1 1 0 0
(все верно)
А этот код
for x in range (2):
for y in range (2):
for z in range (2):
for w in range (2):
F = not(( not x or y) and (not y or w)) or (z == (x or y))
if F:
print ( x,y,z,w )
выводит это
0 0 0 0
0 0 0 1
0 1 0 0
0 1 1 0
0 1 1 1
1 0 0 0
1 0 0 1
1 0 1 0
1 0 1 1
1 1 0 0
1 1 1 0
1 1 1 1
Разница ведь в том, что я переместил not на другое место.
26 2167166
>>167142

>Разница ведь в том, что я переместил not на другое место.


Ты скобочки забыл сделать вокруг выражения
image.png4 Кб, 669x78
28 2167190
29 2167217
>>167110
Гугл изобрел го, что бы студенты могли сносный софт писать, с выразительность там полнейший пиздец, а такой перформанс, который он тебе предлагает тебе нахуй не нужен будет в 90% случаев
30 2167220
>>167217
Я заметил что ща всякие сетевые штуки типа Yggdrasil онли на нем пишут
31 2167226
Сап двачик, я у мамы инженер. Хочу написать тулзу в вебе по расчету кое-какой конструкции. В питоне для этого есть неплохие библиотеки, да и в целом язык простой как два пальца. Но вот насчет интерфейсов и пр. мне не совсем понятно, как будет работать такое веб приложение. Вот в джаваскрипте расчеты будут производится на машине пользователя и в целом как и все джс приложения будет отзывчывым и интерактивным, мне это и нужно, а что будет с приложением на питоне? Где будут производиться вычесления?
Заранее спасибо за помощь, няши.
32 2167335
>>167226
у тебя есть два пути
1) пиши веб-приложение на жс (без питона)
2) пиши десктоп-приложение на pyside

на python+js не пиши, заебёшься вхолостую

Нахуй расчетную программу делать веб приложением? Потому что модно? Все 10 человек которым она может понадобиться не обосрутся скачать и установить.
33 2167395
>>167335

>Нахуй расчетную программу делать веб приложением


>Все 10 человек которым она может понадобиться не обосрутся скачать и установить.


Извини, Сычев, но ебись ка ты сам со своей программой, мы лучше по старинке на калькуляторе.
34 2167467
>>167226
Клиент-сервер ты понимаешь что такое? Если у тебя питон на сервере, как думаешь где вычисления выполняться будут?
35 2167766
В чем я не прав?


Дано число n. С начала суток прошло n минут. Определите, сколько часов и минут будут показывать электронные часы в этот момент. Программа должна вывести два числа: количество часов (от 0 до 23) и количество минут (от 0 до 59). Учтите, что число n может быть больше, чем количество минут в сутках.
Во всех задачах считывайте входные данные через input() и выводите ответ через print().


Мой вариант - препод грит переделывай, все хуйня
n = int(input(150))
h = n // 60 % 24
m = n % 60
print(h, m)

А Вот ПИЗДОМРАЗЬ СЫЧЕВА МОЛОДЕЦ

n=int(input())
if n < 1440:
print( n // 60)
print(n - (n // 60 ) 60)
else:
if 1440 <= n < 2000 :
print( ( n - 1440 ) // 60)
print((n - 1440))
else:
if n >= 2000 :
print(( n - ( 1440
(n // 1440 )))//60 )
print((n-((n//1440)1440))- ((( n - ( 1440 (n // 1440 )))//60)*60))
36 2167794
>>165167 (OP)
сап
поступаю бесплатно в яндекс лицей на 2 курса
резы собеса дадут не позднее 1 октября (я уверен 95% пройду, тест сдал на 10/10)
таквот если в треде есть люди, которые учились там или преподают (лол), опишите, что думаете об лицее
37 2167866
Ребята, посоветуйте че почитать по компутер вижону
С меня тонны нефти, в шапке книжек конкретно по нему не нашел
38 2167876
Суп питонач. Не могу разобраться, как предотвратить выполнение импортированных функций в своей программе.
Хз, как тут принято скидывать целые проекты, но я залил сюда https://dropmefiles.com/0yDIP
В main.py есть описание принципа работы, в целом проблема такова, что при запуске main.py у меня почему-то срабатывают все импортирумые функции, хотя нужно, чтобы сработала только та, которую я выбрал. Пробовал по-разному втыкать конструкцию "if __name__ == main", но это ничего не дало.
39 2167907
Привет, быстрый вопрос:
Если я внутри функции делаю os.chdir(), то при выходе из неё программа вернётся назад или это изменит "глобоальный стейт" исполнения? Если второе, то как питонисто вернуться назад?
40 2167912
>>167907
Рабочая директория это уровень процесса. Если тебе надо работать в конкретной директории то делай chdir, если нет, то работай с относительными или абсолютными путями, очевидно же.
41 2167918
>>167912

>Рабочая директория это уровень процесса.


Спасибо.
42 2167966
СУка бля чёрт блядь бы побрал ебучие регулярка блядь ёбанный рот
есть регулярка
r'текст перед ссылкой - (https:[^\\]+)'
Суть - взять ссылку между текстом и \n. Проверил на regex101 всё работает бля. Засовываю в re.search и получается хуйня - возвращает во второй группе не только ссылку, но и всё, что после неё. ЧО ЗА ХУЙНЯ БЛЯДЬ
43 2167970
>>167876
При импорте в любом виде импортируемый модуль исполняется от начала до конца.

Если ты не хочешь, чтобы какая-то часть исполнялась при импорте, надо её поместить внутрь
if __name__ == '__main__':
____ и вот здесь этот код
____ в том числе импорты можно делать здесь, но если ты так делаешь, то что-то у тебя не так в проектировании скорее всего
44 2167975
>>167966
Что у тебя работает, даун? Ты ищешь любую последовательность до \. Так и пиши [^\n]+ или \S+
45 2167981
https://github.com/em1tao/SIGame_script
объясните как запустить этот скрипт
46 2167982
>>167975
Бляяяяя, в regex101 конкструкция [^\n]+ не работала - тупо до конца текста всё собирал. Но в питоне это почему то работает. Спасибо, конечно, но какого хуя
47 2167983
>>167981
python main.py
48 2167994
https://github.com/em1tao/SIGame_script
я вообще ничего не понимаю в программировании, пожалуйста объясните пошагово что нужно сделать чтоб запустить этот скрипт. чтоб, как там сказано, я в Своей Игре нажимал q и чтоб программа автоматом нажимала кнопку ответа в нужный момент
50 2168020
>>167982
Из-за verbose мб?
51 2168062
>>167997
Напиши в cmd (командной строке), что тебе сказали аноны (python main.py). Но сначала открой cmd в папке, где у тебя расположен код. Для этого нужно выделить расположение (адрес) папки в проводнике, написать cmd и нажать enter.
52 2168070
>>168062
я сделал все как там написано, добавил пайтон в path list, в командной строке написал cd и вставил путь к папке, где находится скрипт, написал python main.py, но скрипт не запустился, а в командной строке просто появилась надпись Python.

и да, что этот скрипт вообще делает? как его юзать?
while True:
try:
if keyboard.read_key() == "q":
im = grab(childprocess=False)
r, g, b = im.getpixel((370, 7))
if r == 255 and g == 230 and b == 130:
pyautogui.click(x=1730, y=930)
pass
if keyboard.read_key() == "p":
break
except:
continue
53 2168074
>>168070

>while True:


пока скрипт крутится

>try:


пытайся сделать следующее:

>if keyboard.read_key() == "q":


если нажата клавиша q

>im = grab(childprocess=False)


захватывай

>r, g, b = im.getpixel((370, 7))


RGB цвета пикселя в координатах 370х7

>if r == 255 and g == 230 and b == 130:


если красный - 255, зеленый - 230 и зеленый - 130, то:

>pyautogui.click(x=1730, y=930)


жми на точку в координате 1730х930

>pass


жди дальше

>if keyboard.read_key() == "p":


если нажата клавиша p

>break


гаси кампутер

>except:


кроме случая

>\tcontinue


когда продолжаешь работать
54 2168075
>>168070
ну, он то и делает. он постоянное работает, если ты нажимаешь q, он делает скриншот, выбирает какой-то конкретный пиксель на экране, смотрит его цвет, если его цвет соответствует какому-то, нажимает на какое-то конкретное место. если нажимаешь p, он выключается. все ошибки и прерывания игнорирует.
55 2168078
>>168075
если у тебя разрешение экрана другое или цвет кнопки изменился, то он не будет работать. ну и если ты кнопку перегораживаешь чем-то
56 2168085
а эту хуйню только через командную строку виндовса запустить можно? если я ее через пайтон запущу она работать не будет или чо?
57 2168096
>>168085
Что значит "через python" запущу?
58 2168100
а это не та древняя игра где ответ был спрятан в определенном пикселе и кодировался цветом?
59 2168123
>>167766
Что за херня во втором варианте, какие её 2000? делаешь n %= 1440 и дальше первый вариант уже.
60 2168202
Модуль стоит, но из программы его не вызвать. Почему?
image.png11 Кб, 329x236
61 2168205
62 2168207
>>168202
На пути посмотри. Разные версии питона.
63 2168214
>>168207

>На пути посмотри


Как?
64 2168221
Ага, нашел, в VSC не тот интерпретатор был выбран спс
65 2168309
Анон, а что быстрее - for цикл или list comprehension? Или без разницы?
66 2168314
>>168309
Примерно одинаково. Компрехеншен все равно раскручивается в фор.
67 2168318
Аноны, хочу на новый прект ввести аннотации, столкнулся вот с чем

a.py

from b import x
from c import y

def some_method(some_var: x.SomeClass) -> None:
____y(some_var)

c.py

def y(some_var: x.SomeClass) -> None:
___pass

Так вот, чтоб эту аннотацию юзать, надо импорд делать только для аннотации?
def y(some_var: x.SomeClass) -> None:
68 2168336
>>168202
У теюя питон не может устанавливать packages в то место, где питон установлен. Открой консоль как администратор и устанавливай.
Screenshot1.png13 Кб, 1137x244
69 2168365
70 2168369
>>168365
А если оставить просто i*j во втором случае?
Будет видно, что кушоет аппенд.
Хотя я видел, что делают что-то вроде f = res.append и потом вызывают уже f, уменьшая расходы.
71 2168387
>>168369
так тогда не равная ситуация, лист комприхеншн же создает список
72 2168388
>>168387
Это не для равности, а чтобы оценить потери на аппенд из общего времени.
Screenshot1.png6 Кб, 1139x132
73 2168390
74 2168403
https://dumpz.org/cAe6kfR9gGn4 хочу понять парсинги, написал код для того чтобы подгрузить видео. но вместо нужного блока с тегами я получаю пустой блок. почему так?
75 2168414
>>168403
Потому что оно формируется динамически на клиенте.
76 2168479
>>168318

>Так вот, чтоб эту аннотацию юзать, надо импорд делать только для аннотации?


Да, без импорта не получится.

Отдельно, в аннотации ты можешь как явно указывать тип
def some_method(some_var: x.SomeClass) -> None:

так и в виде строки
def some_method(some_var: 'x.SomeClass') -> None:

что решает многие проблемы, когда ниже какие-то классы декларируешь. Иногда без этого в принципе нельзя. Но описанную тобой проблему это не решает.

Без явного импорта просто невозможно понять, какой тип ты на самом деле ждёшь. У тебя SomeClass может быть в десятке модулей определён.
77 2168487
>>168318
Да, ты же по сути работаешь в своем модуле с этим объектом, импорт произойдет и так, только через другие библиотеки.
Хотя хотелось бы что бы в всеобщую культуру написания питонокода начали входить интерфейсы
78 2168490
Кто-нибудь с dash работал? Как обновлять элементы через колбэк?
79 2168495
надо бд прикрутить. Как вообще юзается инит коннекта чтоб потом везде можно было запросы выполнять?
80 2168503
>>168495
Обычно при создании объекта приложения это делается
81 2168504
>>168503
Ну это то я понимаю. но не обращаться же через объект приложения к бд для селекта
82 2168507
>>168504
Пробрасывать инстанс бд в другие объекты и из них юзать, если нет глобального неймспейса

>Ну это то я понимаю. но не обращаться же через объект приложения к бд для селекта


Так во всех веб фреймворках делается
83 2168553
>>168487

>Хотя хотелось бы что бы в всеобщую культуру написания питонокода начали входить интерфейсы


Зачем? Ты мыслишь категориями языков вроде Java
84 2168555
>>168553
Они зохавали похапе, теперь лезут в питон, лол.
85 2168575
>>168555
Питон хорош тем, что там предусмотрели аннотацию типов очень давно. Пусть изначально она была больше в виде заглушек и декларации о намерениях.

Но в JS такой возможности нет, поэтому там придумывают компиляторы TypeScript, независимый язык, компилируемый в JS. В PHP посмотрел, подвезли какую-то аннотацию в версию 7.4, то это ноябрь 2019, меньше двух лет назад.

В питоне же есть typing, с хорошей поддержкой в самом движке при этом. Объекты имеют свойство __annotations__, доступное в рантайме, очень много что можно сделать за счёт этого, если захотеть.

Насчёт того, почему не надо интерфейсов. Интерфейсы - это необходимость для компилируемых языков, без интерфейсов просто нельзя чисто технически передать какой-то объект в функцию. В функцию необходимо передать адрес таблицы виртуальных функций, которые что-то нужное делают.

В питоне duck-typing, в питоне основное понятие не "интерфейс" (таблица функций), а "протокол", соглашение о том, какие функции нужны.

И в typing сделали поддержку для этого, начиная с версии 3.8
https://docs.python.org/3/library/typing.html#typing.Protocol
Просто описывается протокол, то есть набор методов, который должен реализовывать класс.

А сам класс не нужно наследовать от этого протокола. За счёт этого нет того леса из иерархии зависимостей, как в Java.

При этом проверки намного более точные и гибкие, чем когда ты просто наследуешь свой класс от какого-то интерфейса и в аннотации указываешь интерфейс.

В общем если хочется грамотно писать, по высоким самым современным стандартам - надо через протоколы.
86 2168584
>>168553

>Зачем? Ты мыслишь категориями языков вроде Java



Это есть не только в джаве и я не говорил, что нужно реализовывать так же. Необходимо разделять контракт и его имплементацию, выше уже привели пример протоколов, по сути как в ГОвне интерфейсы сделали и это правильно. Правда пока это мало кто делает и слишком сильно заигрывают с динамичностью из-за которой нихуя непонятно что за объект выдает та или иная функция сторонней либы, что даже в небольшом проекте вызывает лютую жопоболь.
87 2168600
>>168584

>Это есть не только в джаве и я не говорил, что нужно реализовывать так же.


Но реально ключевое, как это технически реализовывать.

Подход в стиле Java это
class MyClass(BaseClass, InterfaceA, InterfaceB):
....
Где
class InterfaceA:
____def foo(self, par:str) -> None:
________raise NotImplementedError()

а дальше ты определяешь функцию
func(value:InterfaceA):
....
Это вот такой конкретный подход в Java-стиле. Многие, кто пришёл с этих языков, пытаются так писать. Вот не надо категорически. Очень порочное и тупиковое решение из мира компилируемых языков. На компилируемых платформах просто сложно сделать лучше.

Для современного питона есть решения намного лучше. Они намного лучше соответствуют концепции "контрактного программирования", более гибкие и прозрачные, лучше поддерживаются.
88 2168603
>>168584

> пока


Это довольно новые технологии для питона, только в свежих версиях они дошли до уровня, когда полезны.

Инертность есть, надо изучить, привыкнуть, паттерны наработать. Плюс код в библиотеках старых и библиотеки принято писать, чтобы поддерживать относительно старый код.

Но очевидно, что к этому движутся довольно активно. Сейчас в питоне активнее всего вокрут типов что-то новое придумывают.
89 2168608
>>168603

>Это довольно новые технологии для питона


Тайпинг завезли еще в 2015 году вместе с asyncio и при этом мало кто спешит дорабатывать свои либы
90 2168614
>>168608
Как-то завезли, но в каком-то нерабочем виде.

Я сейчас стремительно дорабатывают. То есть вот например куча фич появляется только в 3.8, в 3.9 кучу всего добавили.

Протоколы упомянутые в 3.8 появились. Слёту Literal, очень полезная штука, тоже в 3.8. Хотя это фиксится через typing-extensions, но всё равно, это пока развивающиеся технологии.

Причём asyncio тебе даёт принципиально новые возможности, а typing это всё-таки чисто опция, поддержку кода улучшить, без него тоже работает. Поэтому конечно не так резво будут внедрять.

Но очевидный крен есть в эту сторону.
1824457685795658764.png476 Кб, 481x472
91 2168662
Анон, помоги, плес.
Документация:
https://dash.plotly.com/cytoscape/elements
Код:
https://ideone.com/bEVbCb

>Invalid argument `elements` passed into Cytoscape with ID "cytoscape-elements-basic".


Как передать созданный список словарей на место elements?
elements по идее должны пустыми, потому что в ходе программы будут заполняться, но почему-то сейчас вылезает ошибка.
Что не так?
92 2168726
>>168662
Так может ты сначала заполнишь словарь, а потом начнешь его отрисовывать?
93 2168735
>>165371
Fastapi неплох, все есть.
94 2168740
>>168726
Так я в зависимости от условия генерю список словарей и подаю на выход:
return [{'data': {'id': x}} for x in some_list]
вот только почему-то в таком виде вылетает ошибка. Хотя судя по документации, это правильный формат.

Если кто хоть что может подсказать, буду прищнателен.
95 2168900
Как в django rest framework сделать кастомную схему? Не привязываясь к модели в БД
96 2168905
>>168900
drf-spectacular
97 2168924
>>168905
Это не то
98 2168928
>>168924
Ладно, извини
Нормально объясняй, чо тебе надо
99 2169012
>>168928
Есть класс. Нужно его заполнить и отправить в качестве жсона. Но класс не совпадает со структурой модели из БД.
100 2169242
сап, погромач
нужна твоя помощь с Jinja2
я нихуя не погромист и никогда им стать не хотел, но жизнь сложилась необычно и теперь мне нужно писать код

так вот, помоги решить 2 задачи
первая:

мне нужно за день до отправки посылки каждому челу отправлять сообщение с инфой, ровно в 14:00
как посчитать время, которое нужно выставить для ожидания с момента попадания человека в сценарий до 14:00?

вторая
за час до отправки посылки мне так же нужно отправить еще одно сообщение

КАК ЭТО СДЕЛАТЬ КОДОМ, ПОМОГИТЕ
image.png1,9 Мб, 1200x784
101 2169265
>>169242

>Jinja2

102 2169300
Сяп.
Есть джанговская вьюха, которая принимает эксель-файл, через опенпайхл его парсит в памяти и отдаёт результат.
Если файл прошёл валидацию, его дальше нужно обрабатывать, т.е. идёт новый запрос к другой вьюхе.
Вопрос: как в памяти держать объект Workbook, чтобы не приходилось файл заново обрабатывать? Либо так не получится, и нужно его где-то хранить на диске, например NamedTemporaryFile?
103 2169325
>>169242
Каким способом идет отправка? В каком виде сообщение? Сколько пользователей?
104 2169418
>>169265
ну дада дохуя прогер на джаве нашелся
или на плюсах
или на шарпе
или на чем угодно кроме jinja2
105 2169420
>>169325
спасибо, что откликнулся, но сам разобрался
106 2169457
>>169300
Хуевая архитектура. Сохраняй файл в сторадж и кидай задачу в селери, а потом пиши результат в БД
image.png6 Кб, 282x112
107 2169794
>>169418
Зелёный, чо ты собрался на Jinja кодить?
108 2169836
Загнобили нуба, токсики. Эх вы.
109 2169920
Сап, аноны, помогите с Selenium. Как ему передать уже готовый html, чтоб он его загрузил и открыл страницу? Знаю, что у puppeter у класса Page есть метод setContent(), есть что то похожие у Selenium?
110 2169935
>>169920
Через data url можешь сделать.
111 2170060
>>169935
Можно чуть подробней, как это сделать?
112 2170068
>>170060
Открой в браузере
data:text/html;base64,PGgxPmh1aTwvaDE+
113 2170089
Суп срач. Есть один старый проект с тухлыми зависимостями.

Есть какие-то подходы/рекомендации/методы/инструменты для обновления тухлых проектов?

Так чтобы хоть какое-то направление получить, куда копать и как, чтобы сломать по минимуму.
114 2170126
>>170068
Спасибо анон, это помогло.

Но блин, вылезла новая трабла - как в селениуме добавить заголовки?? попробовал selenium-wire, но после первого перехода перестают открываться страницы с ошибкой "selenium-wire". Как решить эту проблему?
115 2170151
>>167866
https://www.pyimagesearch.com/
Это твое все и даже больше
116 2170163
Динамоговно для даунов.
117 2170204
>>170068
Ссука, шутки за 300. Проиграл зачем-то.
118 2170242
>>170163
Главное, что сильная типизация.
119 2170252
>>170089
pip install --upgrade --force-reinstall -r requirements.txt
120 2170358
>>170252
Маловато будет. Дохуя пакетов. Проекту 5 лет, наверняка мажорные версии сломают кучу всего.
К тому же и сам питон хотелось бы обновить. Вот даже не знаю, с чего начать.
121 2170383
>>170358
Интересный вопрос, тоже послушал бы мнение опытных наносеков
122 2170424
>>170383
Не работать там, где есть много говнолегаси
А вообще, я бы сначала обновил все библиотеки и прогнал бы тесты (они же там есть и покрывают бизнес-логику?)
123 2170513
>>170424
Да тесты есть на каждый пердеж. Ну в целом складывается ощущение, что какой-то супер страты для обновы нет. Ебошишь и смотришь что сломалось. Хуево, конечно.
124 2170570
Если знаешь JS и React, полезно ли будет изучить Django?

Много вакансий с таким стеком?
125 2170579
>>170570
Фулстек что ль? Никому они уже не нужны
А вообще react с джангой не идут. Можешь DRF подрочить или fastapi, но джанга уже понемногу умирает
126 2170583
>>170579

>Помирает


И что вместо нее начинают юзать?
127 2170588
>>170583
DRF, fastapi
128 2170589
>>170588
Это фреймворки для построения апишек, как флас (который действительно умирает), причем тут замена хтоничной джанге?
129 2170594
>>170589

>Это фреймворки для построения апишек


Ты всё правильно понял. Сейчас рыночек в основной такой, что бэк пишет апишку, а фронт пишет приложение на реакте и её дёргает. Всё то, что использует чистую джангу, скорее всего является легаси.

К тому же, ты же спрашивал про то, много ли вакансий на стек React + Django. Ответ: нет, но связка react + DRF/fastapi много где используется, так что смею предположить, что и пригодится такой фулстек куда-нибудь.
130 2170599
>>170594
Для DRF все равно придется знать джангу, потому что джанга огромна и всеобъемлюща, а в нем выкидывается только шаблонизатор
131 2170600
>>170599
Да, но учитывай и то, что отличие DRF от Django не только в том, что "темплейты выкидываются". В самом DRF куча всего, что нужно знать, чтобы им комфортно пользоваться. Так что после джанги всё равно посидеть ещё придётся
1601775459755.jpg215 Кб, 1621x1452
132 2170640
Я новичок. Посоветуйте учебник по дискретной математике.
Заранее спасибо.
none.png16 Кб, 228x116
133 2170683
Почему при вводе None ничего не печатается?
134 2170722
>>170683
Чтобы не срать этими None на каждый случай None.
135 2170729
>>170579
Просто я стал смотреть книжки по Django за 2020-2021 год и там зачастую React или Vue используются.

А еще на апворке смотрел заказы, там регулярно встречается связка React + Django или React + Ruby on Rails.

Алсо на hh.ru:
290 вакансий «react django»
155 вакансий «vue django»
136 2170747
>>170729
Количество ответов по запросу ничего тебе не скажет, потому что:
1) По запросу "django" может выйти "django rest framework"
2) Иногда пишут "Желательно знать django", а вакансия вообще на PHP утрирую
3) Как я и сказал, есть вакансии на django, но они с легаси. Хочешь копаться в этом? Ныряй.

А вообще, давай мы вернёмся к первому твоему вопросу.

>Много вакансий с таким стеком?


Ты же сам на него ответил:

>на hh.ru:


>290 вакансий «react django»


>155 вакансий «vue django»


Так зачем спрашивал?
137 2170754
>>170747
Я подразумевал скорее востребованность и актуальность относительно других технологий для бэкенда, а не конкретное число вакансий. Кроме hh.ru есть же множество других площадок для поиска работы.

>Так зачем спрашивал?


Ну теперь понял, что Django неплохо бы освоить, но в дальнейшем стоит смотреть упомянутые тобой штуки.
138 2170776
Как в redis stream передать многомерный словарь?
Он жрет только одноуровневый, а типа {'a': 1, 'b': {'a': 1}} уже нет. Сериализатором нельзя, он ожидает словарь на входе.
139 2170973
>>170776
Сериализуй в json и передай в редис {"data": "your_json_here"}
140 2171241
кто то шарит в pyrogram? Как сейчас работает get.messages? почитал документацию, сделал по ней вылетает ValueErorr, разные значения в message.id ставил, оставлял только chat.id, не работает, подскажите аноны, как получать сообщения юзерботом на пирограмме?
141 2171462
Суп питонач. Я могу как-то с помощью pip'a узнать какие версии питона поддерживает текущая версия модуля? Или как я вообще это могу сдалеть не заходя в гитхаб и не смотря ченжлоги?
142 2171491
>>171462
Если автор не забил на это, то можешь
https://pypi.org/classifiers/
143 2171581
Джанго-макаки, используют на ваших галерах GraphQL, или это только моя такая выебистая?
144 2171595
>>171581
Это же от требований зависит, если фронт "умный" и может сам менеджить данные, то можно юзать GraphQL, а если нет то и нахуй это не всралось
145 2171620
Почаны, что лучше - Tkinter или PySimpleGui?
146 2171648
>>171620
Нормальные люди не используют python для дестктопных приложений, точка. Учи Java/C#/C++, точка.
147 2171651
>>171620
Бинды к qt. Костылить свой гуй сегодня никаких денег не хватит.
148 2171655
>>171648
Я и не спорю, мне для учебных проектов.

>>171651
А из 2 моих вариантов ты бы что выбрал?
149 2171666
>>171651
Хватит, у маска хватает. Хотя по факту его программисты изобрели урезанный аналог qt.
150 2171711
>>171581
В случае джанги и его орм очень просто юзать графкуэль, в остальном это ебля с оптимизацией запросов к БД + нельзя сделать нормальное кеширование + ебля с проверкой прав доступа.
151 2171722
Результаты 40 отправленных резюме на Python Junior позицию

Из 40 отправленных резюме мне ответило только 3 HR, 14 человек написали что не подхожу, остальные заигнорили.

Первый HR

Прошли с ней общение, сказала идем на тех собес, я обрадывался, следующий тех собес назначен сразу на некст деньги, я немного подготовился, немного запросики повторил и т.д.

Результат тех собеса:

Меня не спросили не одного вопроса по питону, 80% вопросов было по БД и оптимизации запросов, я все это почти провалил.

Пришел ответ от HR :Вы нам не подходите

Следующие два собеседования -

Мне отослали тестовое,первое я выполнил минут за 30, второе за 3 часа, хотя давали до 7 дней там и там, но мне не ответили, а там вышло строчек 50 кода в 1 и строчек 300 в другом, все четко, просто игнор.

У меня уже жопа горит, я блять не знаю, я готов за копейки работать ради первого опыта, но даже шанса не дают попасть на тех собес, а тестовое задание такая хуйня.
152 2171780
ИМХО, если вы самоучка и не успеете запрыгнуть до ~2022 года вы в провале. Сейчас на рынок начнут выходить одебелевшие гигкбрейнсовые-скиллбоксшвайны, которым пообещали за 8 месяцев учебы зарплату в 50к. Если вы не учитесь в норм универе у вас очень очень мало шансов.
153 2171791
>>171780

>ИМХО, если вы самоучка и не успеете запрыгнуть до ~2022 года вы в провале


Никогда так не говорили! Еще бы найти ту древнюю шешебку, где на соц рекламу наложили пасту про вкат и коммиты в одну ветку
154 2171792
>>171722
А вам говорили про нетворкинг. Я вот учусь в максимально провинциальном говновузе по айти специальности, учат хуйне полной, но один из одногруппников оказался пиздец пробивным челом и уже на третьем курсе синьором-помидором стал в одной галере. И тут включается кумовство непотизм нетворкинг, с минимальным собесом взяли джуном в эту контору. Ну он меня не напрямую протянул если что, у него таких полномочий нет и в принципе он фронтенд. Короче заводите правильные знакомства, пацаны.
155 2171887
>>171722
40? Это же очень мало. И в других сферах тебе тоже никто не ответит, дело не в проганье.
156 2171896
Что быстрее в производстве джянга, рейлс или нода?
157 2171908
>>171896
Один хуй разницы. Все упирается в знание инструмента
158 2171911
>>171655
Возьми Electron
159 2171919
>>171722

>второе за 3 часа


> строчек 300 в другом, все четко,


Как можно за 3 часа высрать 300 строчек и что за лютый пиздец будет вместо кода, если так писать? Если не копи-паст из другого места и старых наработок, конечно.
160 2171920
В чём разница между питоновскими abc/collections.abc и typing?

В питоне для описания типов есть два механизма. Один это "абстрактные классы", второй typing.

Вот это сбивает конкретно, на что вообще смотреть и что скорее использовать? Даже официальных рекомендаций нет. typing вроде более новый, активно развивается, но в официальных доках в typing часто идёт отсылка к abc.

abc нравится тем, что вот красивая поддержка рантайма, можно всякие isinstance делать, хотя класс реально не наследован. Но тяжеловато и есть ощущение legacy. А typing вроде как модно и молодёжно.

Если я хочу какие-то свои типы-протоколы задекларировать, через что лучше делать, на 3.8+?
161 2171923
>>171920
typing — это про type hinting (статическая типизация на минималках), abc и abstractmethod — это про интерфейсы. Два совершенно разных инструмента, а ты их в одну кучу смешиваешь

> Если я хочу какие-то свои типы-протоколы задекларировать


Что именно и зачем?
162 2171937
>>171923
Смысл в том, что мне надо как-то задекларировать тип объекта, который я могу передавать в фунцию. У объекта должно быть несколько методов, то есть это "протокол".

Можно пытаться как-то описать это через abc, сделать там тип MyProto, можно через typing, в 3.8 для этого сделали typing.Protocol
https://docs.python.org/3.8/library/typing.html#typing.Protocol

abc интересны тем, что там возможность проверки в рантайм есть, через isinstance. typing интересен тем, что модули вроде mypy делают более глубокие проверки, на соответствие методов тому, что надо, а не просто наличие этих методов, что вообще важно.

А вообще, я как-то серьёзно этими технологиями не пользовался, но сейчас понимаю, что пора понимание улучшать в этой части.
163 2171941
>>171937
Кмк, ты пытаешься решить абстрактную задачу, оттого и нет хорошего понимания, каким путем пойти. Лучше все же решать реальные и конкретные задачи.

> мне надо как-то задекларировать тип объекта, который я могу передавать в фунцию


Зависит от того, зачем тебе. Если ты хочешь сделать интерфейс метода более понятным для программиста — добавь type hint-ов. Про type hinting есть мотивационный PEP, не помню номер. Там отлично описано, как работать с кастомными типами данных и с generic-ами. Но type hinting — это не совсем про улучшение читаемости кода, это больше про линтинг через mypy.

С abc тоже интересная история. Чаще всего, они больше усложняют код, нежели упрощают. Поэтому надо смотреть на конкретную задачу

По теме, советую книжку Expert Python Programming, там как раз есть главы про это все
image.png36 Кб, 962x274
164 2171945
Как это работает? Ошибка старая будто закешировалась и теперь всякий раз выскакивает при вызове функции из модуля. Даже если функцию не использовать, то ошибка всё равно выскакивает.
165 2171951
>>171941
У меня задачи как раз самые что ни на есть практичные.

Я передаю какие-то объекты в функции-методы, пихаю их в очереди. При этом мне надо задекларировать тип, чтобы было понятно, что от объекта требуется.

Даже в форме лёгкого деанона. Есть класс, который делает обработку сложных данных. Там есть методы "подгрузить данные", и в зависимости от того, что за данные, могут быть какие-то события возникать.

Для обработки этих событий класс имеет что-то вроде коллбэков. Но точнее, мне хочется туда передавать объект вида "очередь", а точнее объект, имеющий методы вроде put_nowait. Это может быть как обычная очередь queue.Queue, так и asyncio.Queue, так и специальный мой класс совсем другого рода, то тоже имеющий такой метод.

Я столкнулся с тем, что хочется как-то описать этот тип, те метода, которые в нём нужны, но я не очень понимаю, как это грамотно сделать.
166 2171953
>>171951

class ComplexDataHandler:
def load_data(self, data: pandas.DataFrame):


Можно еще проверку добавить, если сильно нужна:

assert isinstance(data, pandas.DataFrame), ‘Хуйню передал’

> передавать объект вида "очередь", а точнее объект, имеющий методы вроде put_nowait. Это может быть как обычная очередь queue.Queue, так и asyncio.Queue, так и специальный мой класс совсем другого рода, то тоже имеющий такой метод



def func(queue: typing.Union[queue.Queue, asyncio.Queue, CustomQueue]):


Если правильно понял, то тебе type hinting-а будет достаточно

https://www.python.org/dev/peps/pep-0484/
167 2171955
>>171941

>По теме, советую книжку Expert Python Programming, там как раз есть главы про это все


Глянул, на удивление находится по первым ссылкам книжка. Про эту тему там похоже ничего адекватного нет и вообще книжка хоть и свежая, но уже устаревшая. Она про 3.7, а очень много по тебе добавилось в 3.8+.

Но вообще по некоторым другим темам, более серьёзным, книжка смотрится очень интересной и полезной, на первый взгляд, стоит изучить, так что спасибо.

>>171953

>def func(queue: typing.Union[queue.Queue, asyncio.Queue, CustomQueue])


Вот это смотрится очень грязно и костыльно. Я не хочу привязываться к конкретным функциям в принципе. В частности потому, что я хочу, чтобы можно было передавать любой тип, главное, чтобы там были определены некоторые меторы. В объем условно "реализован интерфейс", но без наследования от интерфейса.

Чтобы был полноценный duck typing.

В принципе в typing есть для этого typing.Protocol. Я даже как-то пока так сделал, работает. Но нет уверенности, что я делаю идейно правильно.
168 2171961
>>171955

> хочу, чтобы можно было передавать любой тип, главное, чтобы там были определены некоторые меторы. В объем условно "реализован интерфейс", но без наследования от интерфейса



Тогда через abc и abstractmethod, если тебе более-менее каноничный способ нужен. В книжке, которую кидал, как раз есть пример. Но

> без наследования от интерфейса



Не понятно, откуда такое желание. Явное лучше неявного, все таки. Если у тебя слишком обобщенный и универсальный интерфейс -- это может создать лишнюю сложность. Простой интерфейс -- это один из критериев хорошо спроектированной системы
169 2171970
>>171955
Кстати оказывается всё намного проще, если в питоне 3.8, или если испольовать typing_extension в более старых версиях.

Есть специальный декоратор
@typing.runtime_checkable
который позволяет для протоколов делать проверку через issubclass и isinstance. То есть мне не надо самому абстрактный класс реализовывать, всё typing делает за меня.

Я пишу
@typing.runtime_checkable
class TypeQueue(typing.Protocol):
____def put_nowait(self, element):
________... # рекомендуется именно троеточие

и после этого
def foo(q: TypeQueue):
____ code

и не только mypy отловит, но и в коде я могу сделать
def foo(q: TypeQueue):
____ if not isinstance(q, TypeQueue):
________ raise TypeError

и всё будет работать.
Но в рантайме оверхед, конечно, и проверка ограниченная - только наличие методов. mypy может проверить соответствие методов более детально. Но зато просто в коробке.

И не нужно никакого наследования от интерфейсов.

Я могу использовать queue.Queue или asyncio.Queue, или любую чужую библиотеку и не вносить в них изменения никакие.

Вот это реально здорово.
169 2171970
>>171955
Кстати оказывается всё намного проще, если в питоне 3.8, или если испольовать typing_extension в более старых версиях.

Есть специальный декоратор
@typing.runtime_checkable
который позволяет для протоколов делать проверку через issubclass и isinstance. То есть мне не надо самому абстрактный класс реализовывать, всё typing делает за меня.

Я пишу
@typing.runtime_checkable
class TypeQueue(typing.Protocol):
____def put_nowait(self, element):
________... # рекомендуется именно троеточие

и после этого
def foo(q: TypeQueue):
____ code

и не только mypy отловит, но и в коде я могу сделать
def foo(q: TypeQueue):
____ if not isinstance(q, TypeQueue):
________ raise TypeError

и всё будет работать.
Но в рантайме оверхед, конечно, и проверка ограниченная - только наличие методов. mypy может проверить соответствие методов более детально. Но зато просто в коробке.

И не нужно никакого наследования от интерфейсов.

Я могу использовать queue.Queue или asyncio.Queue, или любую чужую библиотеку и не вносить в них изменения никакие.

Вот это реально здорово.
170 2171971
>>171648
Так а если нужно что-то простое и кроссплатформенное? Какой-нибудь wxPython вполне норм, вроде.
171 2171973
>>171961

>Тогда через abc и abstractmethod


>Не понятно, откуда такое желание


И как он заставит asyncio.Queue унаследовать от этого ABC? По-моему, Protocol как раз единственное разумное решение здесь.
16324138101570.png17 Кб, 746x600
172 2172037
Питонач, посоветуй, пожалуйста, книжек/статей по асинхронности, многопоточности и многопроцессорности.
Спасибо.
173 2172085
>>172037
В документации достаточно инфы, тебе нужно книги по распределенным системам смотреть что бы не обосраться с асинхронностью, потому что когда дело доходит до изменения стейта начинается лютая жопа
174 2172087
>>172085

>тебе нужно книги по распределенным системам смотреть


Можно что-нибудь посоветовать?
image.png368 Кб, 594x875
175 2172092
>>172087
Если хочешь пердолить докеры с куберами, то это можно почитать
176 2172200
>>172085
>>172037
Асинхронность может быть многопоточной?
177 2172221
>>172200
Когда ты начинаешь работать любой более-менее большой системой с очень большой вероятностью она будет многопоточной. Причем ты даже в однопотоке можешь обосраться. И вообще, асинхронность и многопоточность это ортоганальные вещи.

Вот например, есть у тебя состояние, тебе нужно получить и изменить его если оно соответствуюет определенным условиям.

async def change_state(state_id, new_data):
____state = await get_state(state_id)
____if state.available:
________state.data = new_data
________state.available = False
________await set_state(state)

Вроде бы ничего такого, если у тебя эта функция запрашивается не особо часто. Но если ебошить дохуя запросов так, что бы изменение стейта в одной корутине происходило раньше чем его проверка в другой, то у тебя скорее всего проебется консистентность.
Это называется гонка состояний
https://ru.wikipedia.org/wiki/Состояние_гонки
Screenshot1.png18 Кб, 629x301
178 2172377
Аноны, что не так с этим решением? Решал вот эту задачу:
https://leetcode.com/problems/minimum-time-visiting-all-points/
179 2172411
>>172377
В 6 строчке у тебя зачем-то and вставлен
image.png15 Кб, 696x245
180 2172553
>>172377
чот ты сложна сделал
181 2172646
>>172092
А нахуй на обложке птицы?
182 2172647
>>172646
Они могут распределенно насрать тебе на голову.
183 2172654
>>172646
Это не самая странная обложка, которая у них есть
184 2172657
>>172647
но в этом не будет системы
>>172654
пиздец они психи!
185 2172660
>>172646
У этого издания на обложке вымирающие виды.
186 2172668
>>172660
теперь понятно. нихуя они зоологи - орнитологи
187 2172671
>>172668
Тут больше интересно, что ты никогда не видел книг от орайли. Вкатываешься с нуля за три недели первый день?
188 2172741
>>172671
не, я вкатываюсь полностью без книг и каких либо материалов.
ЭКСТРИМ ВАРИАНТ
189 2172953
Решил значит помимо sqlite изучить и что-то серьезнее. Взял докер значит, накатил постгрес, pgadmin. И там оказывается надо создавать базу данных, потом ещё какую-то схему и аж тогда таблицу, когда в sqlite вроде сразу таблицу создавал.

База данных у меня что-то типа postgres_test, потом идёт схема mysuperapp и аж потом таблица test
То я типа теперь должен используя sqlalchemy в модели постоянно дописывать
__tablename__ = "test"
__table_args__ = {"schema":"mysuperapp"}
? Оно-то работает и строчка туда сюда, но мне чет не нравится так дописывать и вроде у других в коде такое не видел. Что мне надо поменять, чтобы просто было без типа того тэйбл аргс?
190 2172962
>>172953
При этом при подключении я же писал что-то вроде
postgresql+asyncpg://user:password@localhost:1337/mysuperapp
Ну это оно базу данных определило, а дальше схема с таким же названием и её уже указываю

Типа postgres_test -> mysuperapp -> mysuperapp -> test
191 2173046
>>172962
оказывается надо просто использовать готовую схему public, а не создавать свою)) сразу понял как включил после отдыха
192 2173310
>>171491
Спасибо.
193 2173492
>>165167 (OP)
Аноны, посоветуйте ресурс или книгу чтобы научится писать качественный код на сабже? Работаю в R§D уже 4 года, язык знаю но мой код похож на парашу может есть чтото для чистоты и качества кода именно
194 2173524
Как лучше всего в pythone обезопасить поиск через mysql чтобы пользователь не мог присобачить drop или ещё что нибудь
195 2173529
>>173524
Экранирование запросов, как и в любом другом языке
196 2173541
>>173524
Почитай про Prepared statement
197 2173558
Как в джанге получить файл настроек, не зная имени приложения, в котором настройки? Мне нужно написать модуль, который можно сразу в готовый проект вставить и его не редачить, но в нём надо что-то из настроек подтягивать, для чего надо имя приложения знать.
198 2173570
>>173558
from django.conf import settings

Не то, что тебе надо?
199 2173662
>>173570
Да, оно, спасибо.
станислав полемин 200 2173769
хочу написать штуку, которая перебором значений нескольких переменных будет решать пример, что я делаю не так?
https://ideone.com/30nLbH
станислав 201 2173773
бамп
202 2173775
>>173769
бамп
203 2173795
>>173492
Я бы подрубал линтер и смотрел на ошибки, которые он находит.
204 2173796
>>173769
бамп
205 2173804
206 2173806
>>173769

>что я делаю не так?


Примерно всё. Попробуй для начала синтаксис языка изучить
станислав 207 2173807
>>173804
что?
208 2173810
>>173807
zip тебе не поможет. Ебашь цикл в цикле в цикле
станислав 209 2173813
>>173810
не мог бы ты показать как будет здесь выглядеть?
210 2173815
>>173813
for a ... :
____for b ... :
________for c ... :
____________ x = ...
211 2173824
>>173815

>


>________for c ... :


спасиби, брат питонист
станислав 212 2173842
https://onlinegdb.com/I2HfJJhXz

чота не работает
>>173824
213 2173846
>>173842
бамп
станислав 214 2173878
https://onlinegdb.com/I2HfJJhXz
бамп. что не так?
216 2173950
>>173910
СПАсибо бОльшое БРатец Питонус!!!!!!
станислав 217 2173987
после for может выполняться несколько условий, если да, то как это выглядит?
https://www.onlinegdb.com/online_python_compiler
что не так??
218 2173988
>>173987
извиняюсь ссылка не туда ведет
вот
https://onlinegdb.com/Mzzc_Vtvd
219 2173989
>>173988
https://onlinegdb.com/Mzzc_Vtvd
бамп
что не так?
220 2173991
>>173989
бамп
221 2174001
>>173989
Что ты со своими бампами заладил? Что ты вообще пытаешься делать и почему ты считаешь, что твой код должен что-то печатать?

Поставь отладочную печать и посмотри значения.
222 2174018
Поможет кто по асинхронщине?
Сделал через aiomisc сервис типа PeriodicService
В коллбеке парсятся данные и делается сохранение в бд. Почему-то именно сохранение не отрабатывает и обрывается из-за raise RuntimeError('Event loop is closed')
Сильно палками не бейте, асинхронщину учу недавно. Почему цикл закрывается до окончания работы запроса?
python3.9
223 2174023
>>174018
Скорее всего ты запускаешь какую-то задачу и реально не ждёшь её окончания.

Очень часто когда ты пишешь в функции main()
await something.run()
на самом деле что-то просто запускается в фоне и ты окончания не ждёшь. Это самая обычная история.

Попробуй в конце фунции main(), или той функции, которую ты через asincio.run() запускаешь, сделать await asyncio.sleep(10). Вот чтобы не закрылось всё сразу.

про aiomisc ничего не знаю.
станислав 224 2174030
>>174001
отладочная печать ничего не умеет. я просто хочу выяснить что не так с этим кодом, где я не соблюдаю синтаксиса, я не могу понять почему код ничего не выдает!
https://onlinegdb.com/66UjCXc--
225 2174040
>>174030
Тебе не кажется, что программирование это не совсём твоё? Код ничего не выдает, потому что условие x==297 and d==117 у тебя не выполняется ни в одной итерации цикла. Чтобы наглядно в этом убедиться, достаточно посмотреть значения d, в случае если x=297, d не принимает 117.
226 2174048
>>174030
Если тебе нужно, чтобы принт срабатывал в случае если хотя бы одно условие верно, нужно использовать or вместо and.
227 2174050
>>174040
мне просто задачку по математике надо решить, знаю, что не мое,

> Код ничего не выдает, потому что условие x==297 and d==117 у тебя не выполняется ни в одной итерации цикла. Чтобы наглядно в этом убедиться, достаточно посмотреть значения d, в случае если x=297, d не принимает 117.



но спасибо за инфу, все понял,
228 2174052
>>174023

>про aiomisc ничего не знаю


Просто вспомогательная либа, где наборы классов для готовых сервисов сделаны.

Бд сразу закрывалась после установления соединения, она же и закрывала цикл.

Благодарю
image.png7 Кб, 612x121
229 2174064
>>173842
теперь подумай, почему у тебя было неправильно. почитай там описание синтаксиса, функций всякое такое
230 2174068
>>174064
а я поздно проснулся. ну пох
231 2174181
Питонач, не понимаю, как продвинуться в изучении языка дальше. Я довольно хорошо задрочил стандартные типы данных и операции с ними, процедурное и функциональное программирование, модульность. Взялся за ООП - но все гайды/туториалы/видосы на ютубе даже длиной в час описывают ООП ровным счетом одинаково: class Animal, dog = Animal("Bobik", "woof-woof"), dog.speak()
Как это все применить в практической плоскости?
232 2174184
>>174181
Начинай писать свои проекты
Изучай нужные/интересные тебе библиотеки
Читай толстые книжки
233 2174188
>>174184

>Начинай писать свои проекты


Так я пишу, вот по работе недавно хуитку для автоматизации написал. Там и модульность, и аутентификация, и запросы из разных баз данных, и запись в третью базу данных, и форматирование данных, и даже работа с гитом и ci/cd. Но это все функциональщина, а вот как перенести логику функций, когда алгоритм просто следует от предыдущей операции к следующей, на логику классов, когда есть все вот эти полиморфизмы, наследования и инкапсуляции - вот это я вообще не представляю. И примеры с class Animal вообще не помогают.
234 2174201
Нампи имеет смысл собирать с 8байтным интом для x64?
235 2174228
>>174188

>это все функциональщина


Это плохо, что ли? Наоборот, хорошо. ООП нинужен, уже тем более насильно его пихать.
236 2174231
>>174188
Очень полезно даже не самому писать, а с чужими проектами разбираться, как они устроены, работают и т.п. С какими-нибудь небольшими.

А к ООП надо самому придти, чтобы понять, зачем это надо. И смотреть, как это реально используют. Потому что на задачах, что можно в примитивных примерах изобразить, смысла в ООП нет никакого. А на реальных имеет, хотя не на всех задачах.
14579580166763.png77 Кб, 200x199
237 2174234
>>174231

>А на реальных имеет

238 2174253
Так. А что python на 4 версию переезд планирует?
239 2174325
>>174253
Пока не известно, в ближайшие лет пять начинать обсуждать не планируют.
240 2174336
Почему получаю ошибку 'ModelSelect' object has no attribute 'content'? Согласно докам я через графовые связи могу получить атрибуты и значения другой модели.

Models:

class Requirement(RegistryRequirement):

req_id = CharField(max_length=20)
guid = UUIDField(unique=True, default=uuid4)
created = DateTimeField(default=datetime.now)
updated = DateTimeField(null=True, default=None)

class Meta:
database = source_db_proxy
db_table = 'requirement'

class RequirementDescription(RegistryRequirement):

content = TextField(default=None, null=False)
publication_status = TextField(default=None, null=True)
publication_date = TextField(null=True)
work_status = TextField(default=None, null=True)
regulation_level = TextField(default=None, null=True)
act_requisites = TextField(default=None, null=True)
act_text = TextField(default=None, null=True)
valid_to = DateField(default=None, null=True)
validity_status = BooleanField(default=None, null=True)
object = TextField(default=None, null=True)
compliance_list = TextField(default=None, null=True)
compliance_list_ext = TextField(default=None, null=True)
req_guid = ForeignKeyField(
Requirement, to_field="guid", backref="descriptions", on_delete="cascade"
)

Select query

query = (
db_source.Requirement
.select()
.join(db_source.RequirementDescription)
)
for q in query:
print(q.guid, q.descriptions.content
240 2174336
Почему получаю ошибку 'ModelSelect' object has no attribute 'content'? Согласно докам я через графовые связи могу получить атрибуты и значения другой модели.

Models:

class Requirement(RegistryRequirement):

req_id = CharField(max_length=20)
guid = UUIDField(unique=True, default=uuid4)
created = DateTimeField(default=datetime.now)
updated = DateTimeField(null=True, default=None)

class Meta:
database = source_db_proxy
db_table = 'requirement'

class RequirementDescription(RegistryRequirement):

content = TextField(default=None, null=False)
publication_status = TextField(default=None, null=True)
publication_date = TextField(null=True)
work_status = TextField(default=None, null=True)
regulation_level = TextField(default=None, null=True)
act_requisites = TextField(default=None, null=True)
act_text = TextField(default=None, null=True)
valid_to = DateField(default=None, null=True)
validity_status = BooleanField(default=None, null=True)
object = TextField(default=None, null=True)
compliance_list = TextField(default=None, null=True)
compliance_list_ext = TextField(default=None, null=True)
req_guid = ForeignKeyField(
Requirement, to_field="guid", backref="descriptions", on_delete="cascade"
)

Select query

query = (
db_source.Requirement
.select()
.join(db_source.RequirementDescription)
)
for q in query:
print(q.guid, q.descriptions.content
241 2174340
>>174336
Это peewee, забыл указать
242 2174383
>>174181
про абстрактные фабрики читал?
243 2174389
Как скомпилировать два файла python в один?
допустим есть
common.py
main.py
а нужно получить скомпилированный в виде одного.
python -OO -m py_compile common.py main.py
создают два файла и соответственно их нельзя запустить, компиляция нужна под linux и windows
244 2174409
>>174389
Тебе нужен бинарник?
245 2174413
>>174409
да, под win и linux
246 2174415
>>174413
Nuitka посмотри
247 2174417
>>174413
Nuitka, можно через cython
248 2174443
>>174415
>>174417
Вроде то что нужно, спасибо!
249 2174467
250 2174484
>>174389
Если тебе нужен исполняемый бинарник, не зависящий от питона, это одна история. Nuitka как вариант.

Если тебе нужно просто в виде одного файла собрать, то там другие опции есть, в виде архива собрать (причём вместе с зависимостями можно) и потом архив запускать. Но для этого нужно будет, чтобы питон был в системе.
https://docs.python.org/3/library/zipapp.html
251 2174515
Посоветуйте хороший учебный материал по Джанго, что-то похожее на Flask mega tutorial от Мигеля Гринбегра было бы отлично.
252 2174534
>>174515
Django By Example
253 2174606
>>174484
А есть годные обфускаторы кода? Просто держать проект на сервере заказчика опасно, кто знает сегодня он платит а завтра заберет себе проект и будет сам им заниматься.
254 2174643
>>174606
Работай с байткодом
255 2174773
>>174606
И правильно сделает, лучше сторониться такого зловредного говна как ты.
Учись работать нормально.
256 2174784
>>174606
Тогда или компиляция в бинарник, или надо предоставлять сервис, а не код, или/и прописывать всё в договорах.

Байткод не решение, по питоновскому байткоду исходный код восстанавливается практически один в один.
257 2174964
>>174228
Мне казалось, что ООП - это де-факто стандарт индустрии, вообще любого языка. А если я пишу код на функциях, то это какая-то хуета. Разве нет?
258 2175084
>>174964
https://www.youtube.com/watch?v=QyJZzq0v7Z4

ООПщики сами от своих вещей отказываются, вроде наследования.
259 2175110
Скинул резюме, а мне говорят "не увидел у вас в резюме вашего образования"
Вот нахуя так сразу срезать? Чот грустно все это
260 2175192
>>175110
Так и напиши:
Образование: нинужно.
261 2175240
>>175110
Так добавь.
262 2175252
>>175110
Ну пройди атестацию. Или купи диплом.
263 2175265
>>175240
>>175252
Образование: "ну дома книжки чот читал, что на дваче советовали, да на степике чот сертификаты какие-то получил никому не нужные"

Да в принципе норм, я в ваше айти не сильно стремлюсь, пока на 1с терплю как меня все в жопу ебут
2902497480.jpg84 Кб, 819x819
264 2175333
>>175265

>да на степике чот сертификаты какие-то получил никому не нужные


Чем этот принцип отличается от университетского?

>ну дома книжки чот читал, что на дваче советовали


А что такое образование? Преподование в узкоспециализированном месте набор фактов? По какому критерию оно отличается от набора фактов, полученного дома от книг, или других медия носителей?
Образование по факту нужно для социализации (если ты соц. выблядок, который ищет друзяшек), и ради индокринации. Причём последнее было с раннего существования этого социальнного института, а именно в римской империи.
Если ты в свои года не понял - что образовани spook времён либерального просвещения объёб гоев на бабки, мне тебя жаль.
265 2175345
>>175110
Ну ты и додик, когда был джуном, то обмазывал резюме сертификатами мейла и степика. Залетел в ойти в с первого собеса.
266 2175354
Анон, помоги нубу!
Хочу сделать бота для линейки через библиотеку pyautogui, но блин, линейка не регестрирует клики, что нужно использовать, чтобы клики регались в линейке?
267 2175361
>>175333
Что за чел на пике?
268 2175363
>>175265
>>175110
>>175333
бля да беги от таких работодателей что требуют высшее или еще какое говно, типа чтобы ты обязательно не курил или пил смузи .
это дауны.
269 2175364
>>175361
Куртис Ярвин "Молдбаг".
270 2175376
>>175364
Охуеть, как ты про него узнал?
271 2175383
У меня пара вопросов по статическим файлам и веб фреймворкам.
Как правильно организовать хранение файлов? Ну для своего проекта, просто отдельный каталог? И еще, прям всегда следует nginx использовать для отдать статики? Ну т.е. картинки-то понятно, а видео, например? Если я чанками отдавать хочу? И вообще, есть какая-нибудь альтернатива для обслуживания статики, кроме nginx? Интересует что-нибудь в асинхронных фрейворках. У многих есть что-то вроде serve_static, но это для чего, если не рекомендуется использовать?
272 2175384
>>174188
Пока код не сильно отличается от стандартных примеров, выделение объектов не нужно.
А вот когда что-то действительно свое пишешь, у этой штуки появляется свое состояние и интерфейс, который в глобальной области вообще не к месту, ему бы свою область сделать. Вот с этого и начинается ООП. Когда хочется сгруппировать все в папочки и навести порядок.
273 2175388
>>175383
Хранить на ютубе с доступом по ссылке
274 2175394
>>175388
Репорт
275 2175399
>>175394
На твоём говносайте канал закончится, когда там 10 человек будут видео смотреть. Только CDN тебе поможет.
276 2175416
>>175399
Так ты не загружаешь на cdn свою статику, он запрашивает у тебя, а потом только кеширует. Ты хоть почитай что советуешь. Я спрашиваю, как организовать хранение статики, а не как быстро доставлять её в любую точку
277 2175427
>>175416

>Так ты не загружаешь на cdn свою статику


Это зависит от CDN, например, s3 хранит все данные у себя, а ты просто встраиваешь в свой сайт ссылки
278 2175430
>>175427
Тот самый s3, который может откручивать в минус твой баланс и ты потом квартиру должен продать, чтоб рассчитаться за счет от ddos по запросам?
279 2175434
>>175430
Если ты проебался с настройками оплаты, что бы не уходить в минус это твои проблемы.
В любом случае жирный контент это не то, что ты должен хранить у себя.
280 2175447
У меня как-то был проектец - чувак купил на месяц доступ к каким-то инфоцыганским курсам про успешный успех и хотел скачать их себе. Там был обычный вордпресс и unlisted ссылки vimeo. Ну я четенько скачал на пару впсок, запущенных на день, а потом оттуда синкнул ему на гугл-драйв. В районе терабайта там этого говна было, надеюсь они потратились чуток, лол.
281 2175455
>>175434
А как ты настроишь его?
Если только метрику по количеству запросов делать будешь или считать сколько у тебя биллинг. Т.к. бабки у тебя откручивает не в реал тайме, а через час-два или больше. Так что загнать тебя в минус не так уж и трудно. Компании и обычные люди жаловались на то, что нет возможности настроить чтоб твое облако уведомляло о приближении нуля или вовсе отключалось, если ты зашел за определенную сумму. Амазону то выгодно
282 2175465
когда там эти ваши сайпаи на 10 питон перейдут?
283 2175487
>>175455

>Если только метрику по количеству запросов делать будешь или считать сколько у тебя биллинг


У них есть AWS Budgets, где за тебя это делают, можешь алерт на каждый процент поставить
https://aws.amazon.com/blogs/aws-cloud-financial-management/getting-started-with-aws-budgets/
284 2175553
>>175354
Ёмаё, сегодня целый день пытался обойти эту шнягу, вроде называется Smart Guard. Даже AHK не работает, может кто знает, как обойти эту штуку? Все библиотеки испробовал...
285 2175568
>>175553
Хуйня для защиты от автоматизации не дает тебе что-то автоматизировать? Удивительно.
Ну что тут можно сказать - бери книгу по с++ и учи, сделаешь драйвер и обойдешь его на уровне ядра. Как сделаешь, приходи.
286 2175573
>>175568
но почему для линейки нет библиотек, которые могут обойти её...
Я ещё нуб, не знаю даже в какую сторону искать или что делать.
287 2175587
>>175573
Ты тупой что ли? Как ты себе это представляешь?

- Да, мы создаём и продаём софт с защитой от ботов и читеров
- Да, мы знаем, что есть библиотечка на питончике, которая шлёт нахуй всю нашу систему

Серьёзно блять?
288 2175589
>>175568
Посоветуешь книгу? Только без учета, что я 20 лет стажа на сипипи имею
289 2175623
>>175589
Что, уже деменция начинается?
С опытом куришь ддк и можно опционально навернуть тот же шиндовс интерналс.
290 2175627
Что я могу создать на Пайтоне, чтобы работодатель сказал "Вау, я преклоняюсь перед твоим гением, держи 200К"?
291 2175632
>>175627
Что-то новое и гениальное
292 2175654
>>175632
Векторный гипердвач?
293 2175656
Кто знает какие еще есть ресурсы кроме codewars, где есть возможность порешать задачи, попрактиковаться на python?
294 2175663
>>175656
Leetcode
295 2175666
>>175663

Спасибо.
296 2175670
>>175654
Уже есть. Пикабу зовётся
297 2175807
>>175384

>Вот с этого и начинается ООП. Когда хочется сгруппировать все в папочки и навести порядок.


Ну хз, разве не для этого как раз модульность нужна? Вот на примере моей приложухи - есть точка входа main.py, есть папочка controllers, в ней по отдельному .py файлу для контроллеров баз данных, отдельно лежит аутентификация, в /app лежит логика, в /output лежит выход. Вроде норм все расфасовано по папкам.
298 2175868
>>175627
Операционную систему.
299 2175922
>>175807
В моем понимании модуль это то же самое что и библиотека, набор функций без состояния.
Вот пример, когда мне кажется очевидно преимущество ООП, это Micropython. Класс SPI работает одинаково для аппаратного и программного варианта. То же самое с таймерами и другой периферией.
Если даже в таком случае тебе проще сделать функции отдельно, данные отдельно, то я даже не знаю, наверное тебе ООП ни к чему вообще.
e05b3945eac9a307b25c97c2db2f1cc6.jpg93 Кб, 919x1000
300 2176203
Анонэ, а как понять, что ты уже кодишь на уровне джуна или даже продвинутого джуна? Какие проекты нужно уметь реализовывать? Какие критерии? Одно же дело знать синтаксис, отдельные какие-то технологии, но какова должна быть практическая реализация, чтобы ты мог бы быть уверенным в том, что потянешь уже работу в компании? А не жиденько обосраться в итоге и быть выпизженным с позором.
301 2176214
>>176203
Если при виде полноценной задачи (а не задачки в три строчки) ты не дрищешь в штаны и знаешь, что делать. Все эти градации отделяет лишь сложность таких задач.
302 2176249
>>176214
Если я могу, но с гуглом?
303 2176265
>>175587
А главное разработано и то, и другое одними и теми же людьми!
304 2176313
>>176203
Если сможешь за недельку накидать фронтенд алгола-68 для llvm, то поздравляю- ты больше не стажер.
305 2176727
>>175399

>На твоём говносайте канал закончится, когда там 10 человек будут видео смотреть. Только CDN тебе поможет.


Стоимость трафика на CDN раз в десятки раз выше, чем трафик на vps/серверах. Если у тебя заканчивается трафик на рядовом vps/dedicated сервере, то это значит, что ты бы на AWS уже заплатил за него сотни долларов. Тогда как впс такая стоит десятку.
306 2176779
>>176727
Не путай трафик и канал.
307 2177073
Я скобкоёб, меня стиль K&R выводит из себя, что уж говорить про висящие куски питонокода. Ужасает невозможность написать if/for/etc() {} в одну строчку. Как питон можно превратить в скобкоебский язык? Может есть какая-то надстройка над интерпретатором чтобы скобки кругом и всё как в родных сиподобных языках?
308 2177095
>>177073
Никак, иди в перл.
309 2177127
>>176779
CDN будет выгоднее, когда у тебя большая нагрузка, но редкая. То есть скажем в основном у тебя тишина, а потом бац, и прямой эфир с большим трафиком.

Иначе ты будешь платить сильно больше. Причём тут уже очень кусачие цены, потому что видео реально отжирает.

Вот оценки. Если ты вещаешь в 3 мегабита, то час трансляции у тебя будет 1 гигабайт примерно. Если твою часовую трансляцию смотрит 1000 человек, то ты истратишь террабайт. По тарифам амазона ты должен будешь за одну эту единственную трансу заплатить 50-100 долларов. При том, что всего 1000 человек.

Если же ты берёшь себе сервер с лимитом трафика, но с большими лимитами, то там куда скромнее цифры. Вот, например, меньше 1200 долларов в месяц, 10 гигабит подключение и 500 тб трафика. По тарифам амазона 500 тб это больше 20 тысяч долларов. Я сейчас не смотрю на unmetered тарифы, там скорее всего просто очень много пользователей сидит и ты большой канал не выжмешь.
Вот пример:
https://www.esited.com/hosting/10g-dedicated-server/
про этого провайдера ничего не знаю, просто тут с явно прописанными лимитами и при этом 10 гигабит порт.

Вещать стримы на AWS и аналогах можно только в том случае, если по подписке за деньги полноценные, что каждый пользователь реально не меньше 10 рублей в час платит за то, что смотрит.
310 2177249
Двощ, помоги, умоляю. Есть проект Skylift https://github.com/adamhrv/skylift для ардуино, не могу запустить так как постоянно ошибка синтаксиса
python skylift/cli_jobs.py wigle_api --ananas --wigle_api_key QUlEMjJiODA3ODk1ZTFjNGNzA2NDE= --jobs data/jobs/wigle_api.csv
File "skylift/cli_jobs.py", line 109
fp_wigle = join(job.path_in, f'{job.filename}.csv')

python skylift/cli_jobs.py
File "skylift/cli_jobs.py", line 109
fp_wigle = join(job.path_in, f'{job.filename}.csv')

В чем именно ошибка и как это пофиксить?
311 2177250
>>177249
SyntaxError: invalid syntax
312 2177251
>>177249
>>177250
Ему не нравится ф-стринг. У тебя второй питон или третий младше 3.6.
313 2177383
Анон, какие вопросы задают на собесе на джуниор дата инженегра?
Стек Python, Airflow, Clockhouse, Tableau, Docker.
Предполагаю, что будут дефолтные вопросы, как и на бэкендера: ооп, бд, базовые алгоритмы. Но может еще есть какие-то по специальности?
314 2177477
Кто-нибудь знает чем переводить "десять" в 10? есть что-нибудь от яндекса?
315 2177551
Как в aiogram хранить переменные для каждого пользователя свои?
При этом сейчас у меня есть состояния пользователя реализованные через class UserStates(Helper)
316 2177834
Подскажите как сделать.
Есть небольшое приложение, оно возвращает урлы.
nginx отдает картинки. Как сделать так, чтоб от приложения отдавать nginx команду на возврат картинки? Т.е. типа у меня своя учетка, я загрузил картинку. Она доступна только мне. Я не хочу, чтоб другой кто-то по ссылке на пичку смог получить её.
317 2177840
>>177834
Прокси с проверкой доступа, лучше на каком нибудь го такое писать.
318 2177925
>>175376
Он просто из секты заднеприводных, и я не бэкендеров имею ввиду.
319 2178023
>>177925
почитал про него, он рили псих. асло он педик или гомик?
320 2178180
Привет.
Работаю инженером в одной госшараге.
Для работы написал себе скрипт на питоне, просто обработчик данных.
Коллеги очень заинтересовались затребовали себе такой же.
С помощью pyinstaller сделал exeшник.
Всё работает отлично, но есть одна проблема - при клике на эксешник сначала происходит распаковка файлов и она идёт ОЧЕНЬ медленно. Ну и компы у нас в шараге весьма древние. Т.е. я кликаю по эксешнику, запускается пуская консоль и до запуска программы надо ждать иногда 10-20 секунд.
Меня это устраивает, но моим коллегам очень не нравится, что в консоли в течении всей распаковки ничего не пишется. Если бы там было написано что-то типа "Ждите, программа запускается" - это было бы всем понятно. А так люди думают, что просто всё зависло.
Но как я понял, вывести такое сообщение во время распаковки просто невозможно. Это блин очень странно, неужели только я столкнулся с такой проблемой? Всё что я смог - это включить дебаг bootloader и в консоль теперь сыпется всякий мусор при распаковке. Но выглядит это максимально криво.
Правильно ли я понимаю, что единственный шанс это исправить - добавить к моей проге графический интерфейс с одним-единственным окошком как в консоли, отключить нафиг в pyinstaller саму консоль и использовать встроенный в pyinstaller splash screen?
Или может есть какие-то альтернативы?
Неужели только у меня эксешник распаковывается так долго? Или это только меня смущает, всем остальным похуй?
321 2178192
>>178180
Не может такого быть. Там в несколько мегабайт бандлы получаются, что там делать 10-20 секунд?
322 2178209
>>178192
Ну мой эксешник весит 35 мегов. Если запустить pyinstaller в onedir режиме - получится папка на 80 мегов.
Не знаю, почему так долго распаковывает.
Я использую-то всего три библиотеки - pandas для загрузки данных из экселя, shapely для построения геометрии и matplotlib для рисования результирующих картинок.
Бывает кстати ещё одна проблема - выводится сообщение "Matplotlib is building the font cache. This may take a moment.", причём иногда оно появляется, иногда нет - но это уже не проблема распаковки понятное дело.
323 2178227
>>178209
Ну хз тогда, это большие и навороченные либы, с ними могут быть нюансы.
324 2178338
>>178192
распаковывать исполняемый код в виде кучи файлов и проверять его антивирусом.

Используй onedir, заебал.
325 2178370
>>178180

>Это блин очень странно, неужели только я столкнулся с такой проблемой?


вообще говоря,да.
Ну не стремятся питонисты код шифровать и распространять экзешники.
То есть, один из способов решения этой проблемы - поставить коллегам питон.
326 2178371
>>178338
Кстати да, у нас на работе Касперский параноидальный стоит.

>Используй onedir, заебал.


И передавать коллегам 80 мегов говна?
Блин, эксешник так удобен и выглядит так аккуратно.
327 2178379
>>178370

>То есть, один из способов решения этой проблемы - поставить коллегам питон.


Тогда нужно будет и все библиотеки им ставить.
Вообще это возможно, но долго и сложно - нужно будет писать служебку и обоснование нашим админам, потом учить коллег, как запускать питон...
Блин, я вообще так-то специально из матлаба в питон перекатился в надежде, что наконец пропадут проблемы с передачей моих прог другим людям.
328 2178383
>>178379
На шарп тогда надо было катиться.
329 2178386
>>178371

>Блин, эксешник так удобен и выглядит так аккуратно.


Ты инженер или формошлеп? Тебя не должно это ебать. Софт решает задачу и решает ее уникальным образом. Конкурировать не с кем.
Похуй вообще. Они будут пользоваться чем угодно, если это экономит им время.
330 2178391
>>178379

>писать служебку и обоснование нашим админам


так ты ты уже нарушил гостайну и предал Родину, пердун из НИИ!
Сиди и вручную интегрировай!
331 2178393
>>178386

>Ты инженер или формошлеп?


Инженер, но мечтаю быть формошлепом. Даже курсы окончил яндексовкие по JS и питону.

>Они будут пользоваться чем угодно, если это экономит им время.


Безусловно. Проблема в том, что мне самому не очень приятно, что все впечатление от моей программы портится каким-то сраным распаковщиком.
332 2178397
Наверное, нужно ещё раз объяснить. Мне не важно, что прога долго распаковывается. Подождут 20 секунд, не развалятся, сами расчеты идут достаточно быстро, а пользоваться этой прогой будут относительно редко.
Но мне эстетически неприятно видеть висящее чёрное окно консоли с моргающим курсором без каких-либо надписей.
333 2178398
>>178397
чувак, все прекрасно понятно.
Вот такой вот выбор - быть Инженером или Пользователем.
Твои коллеги поборят в себе лень, если они инженеры и все будет хорошо.

Никто пока не решил эту проблему и не написать новый интерпретатор питона, такой чтобы он внутри exe работал.
Нужны усилия еще большего числа людей.

но можешь еще perl освоить ради смеха. там все это работает.
334 2178401
>>178397

> эстетически неприятно видеть висящее чёрное окно консоли


а, так ты не весь мануал на pyinstaller прочитал.
там есть ключик --windowed
335 2178402
>>178180

>Но как я понял, вывести такое сообщение во время распаковки просто невозможно.



опять же, пункт про splash screen в документации тоже пропустил?
336 2178403
>>178401
Это же просто отключит консоль. Станет ещё хуже - при клике на эксешник вообще ничего не будет происходить пока он не распакуется. Даже не поймёшь, кликнул ты по нему вообще или нет.
337 2178406
>>178402
Так splash screen с консолью не работает, как я понял. Нужно будет писать гуй, или я не прав?

>>178180

>Правильно ли я понимаю, что единственный шанс это исправить - добавить к моей проге графический интерфейс с одним-единственным окошком как в консоли, отключить нафиг в pyinstaller саму консоль и использовать встроенный в pyinstaller splash screen?

338 2178407
>>178406
Не знаю. Нам это не надо.
Ты инженер или где? Протестируй и отпишись.
339 2178412
>>178407

>Нам это не надо.


Что и удивительно. Я преполагал, что питон - язык для инженерных расчетов, современная замена фортрана. И что такие проблемы давным-давно решены без костылей.
Но ладно.
340 2178418
>>178412
Инженер-питонист просто проставит что захочет на свой АйМак M1 из незаблокированного интернета. Там даже корпоративные способы контроля не особо работают.

А вы там ебитесь в подвале сами со своим устаревшим железом и без SSD
341 2178428
>>178418
Лол.
Я так-то в филиале Роскосмоса работаю.
К которому потом твои инженеры-питонисты на аймаках, роняя по дороге кал, бегают за помощью, когда очередной еба-шаттл ебанет в полете, забрав с собой смертничков.
Зато аймак/ссд/интернет на работе, только результатов как не было, так и нет.
342 2178448
>>178428
На ликеро-водочном филиале?
https://lenta.ru/news/2020/11/13/poehali/
343 2178471
>>178428
это я тебя еще пожалел.
на самом деле инженер-питонист дает коллегам ссылочку на google collab, который сразу его ноутбуки запускает в вебе.
344 2178473
>>178023
Полехче тут с антисемитизмом и гомофобией, гой.
How-to-Add-a-Bot-in-Telegram.jpg38 Кб, 602x372
345 2178876
Аноны, вопрос не по теме, но в голову пришло его задать только программистам Python, ведь Telegram-боты пишутся на Питоне.
Есть ли бесплатный Телеграм-бот, который приветствует нового пользователя, заставляет его решать капчу и при этом приветственное сообщение видно только новому подписчику?
346 2178936
>>178876
Shieldy но я видел и другие аналоги.
347 2178959
>>165167 (OP)
Пацаны, пытался запустить pytest из Makefile, он мне без конца серил что "pytest not found" хотя он был установлен что в виртуальной среде что глобально, когда изменил на "python -m pytest" как советовали тут https://stackoverflow.com/questions/35998992/py-test-command-not-found-but-library-is-installed он мгновенно все сделал как надо
Че это за магия?
image.png57 Кб, 734x370
348 2178960
>>178959
Я херею с этих петушков со стэка - тупо цитируют оф доки питона, но когда им задают вопрос по существу "что значит что ты только что сказал", теряются и убегают
349 2178961
>>178876
Вот ты додик. Ты разве видел в каналах личные сообщения?
Это же канал. Он общий.
Никакое api нe заставит Телеграм делать то, что он не хочет делать.
350 2178969
>>178960
-m значит, что ты запускаешь модуль, точнее пакет, на исполнение.

Технически, если ты сделал пакет
my_pkg,
то при запуске
python -m my_pkg
у тебя запустится __main__.py файл, что лежит в каталоге этого модуля.

Примеры
python -m http.server
это чтобы веб сервер запустить из консоли. И много другого.

Но необходимо, чтобы модуль поддерживал этот функционал, чтобы там был файл __main__.py
352 2180096
>>178428
Лол, биомусор из госшараги учит кого-то эффективности. Еще и про результаты какие-то говорит, сидя в рогозинкосмосе. Сюр какой-то.
353 2180167
>>178180

>Коллеги очень заинтересовались затребовали себе такой же.


>Нахуй пошли, я забесплатно делать для вас это не буду

354 2180179
>>178180
Не нравится, пусть не пользуются, я не очень понимаю, какая твоя-то беда? Просто скажи, что так работает.
355 2180329
>>179911

>Набигай, посоны


Куда набегать то? Я помню, было время, тут треды за три дня в бамплимит уходили, сейчас этот уже больше двух недель, и только 350 постов.

Питон, похоже, теряет популярность и уходит в андеграунд.

Хотя может это просто вкатуны в программирование заканчиваются.
356 2180367
357 2180380
>>179911

> вырвался на первое место


> отрицательный рост минус 0.00%



поржал с этой британской статистики.
358 2180402
>>180380
Значит остальные упали/недоросли.
16336752688570.png299 Кб, 586x586
359 2180409
Пацаны, два вопроса по джанго, выручите пожалуйста.

1. ForeignKeyField для нескольких разных моделей
Ну типа:
model House
..
model Garage
..

и мне нужно в одной модели типа:
model Property(model.Model):
.. property = model.ForeingKeyField() - в котором можно выбрать гараж это или дом или еще чего.
Как сделать это по-тупому я знаю, просто добавить поля property_house = .... property_garage= ... с null=True blank=True
и потом функцией смотреть что заполнено, но это как-то всё равно тупо

2. Какой самый простой способ для django выводить простецкие графики?
Конкретно - Line Chart. Интересует как решение с JS так и просто картинкой
360 2180521
>>180409
1. GenericForeignKey
2.
- Для картинки: генери график Ploty сохраняй в jpeg, и кодируй в base64 например для автообновления.
- Для JS - chart.js https://simpleisbetterthancomplex.com/tutorial/2020/01/19/how-to-use-chart-js-with-django.html
361 2180628
>>180409

>2. Какой самый простой способ для django выводить простецкие графики?



1. docker run apache/superset
2. "вот вам, ребята, логин и отъебитесь от меня со своими графиками. все равно у вас каждый день новая хуйня в голове"
362 2180734
>>166245
Какие регулярки, шизик. С таким входными данными там легко можно обойтись split()
363 2180866
приведите пример задания которое дают на реальной работе плиз
364 2180896
>>180866
Зайди на фриланс биржу, долбоеб.
image.png85 Кб, 275x183
365 2181173
>>180896
при чем тут фриланс ебанат
366 2181225
В чём разница между class ABC: и class ABC(): ?
Инб4 в скобках.
Эти скобки что-то дают?
367 2181289
>>181225
Ничего не дают. В скобках ты можешь указать классы, от которых наследоваться. А можешь не указывать.
368 2181306
>>180866
Реальной работе кем, ёпт? Питон-разработчиком? Это довольно общий термин.
369 2181336
>>180866
Напиши скрипты сборки для систем в докере.
Сделай сайт-сервис, который будет получать данные, получать данные из редиса, хранить их в кликхаусе/постре/монго.
370 2181342
>>181173
Иди мети двор, быдло.
371 2181352
объясните пожалуйста долбаебу, как убрать ебаную кавычку " из строки? Делаю replace(' " ', ' ') и нихуя, добавил уже блять эту кавычку в библиотеку с пустым значением, библиотеку тоже пидорасит.

Сама задача: "sosi hui" вывести без кавычек
372 2181359
>>181352
Ты в интерактивной сесии сидишь что ли, дурень?
373 2181363
>>181352
уже не надо
374 2181367
Скорее всего, заезженный вопрос, но вот:
Что делать дальше?
Я посмотрел 2 курса на Степике от института биоинформатики по Питону
Писал несколько скриптов для работы с базами данных (на работе таким образом упростил свою задачу, вроде выгрузки из Оракла, сохранения в csv, прохождение по данным из файла в Вертике) и всякую чепуху вроде простейших парсеров и телеграм ботов
И вот сейчас у меня ступор: что учить, что писать (особенно это вызывает окаменение мозга), как двигаться?
Знаю, тут есть опытные ребята, которые проходили такой этап
375 2181391
>>181359
>>181363

>АХАХАХАХАХАХА

376 2181393
>>181367
Работать за деньги начать не пробовал?
377 2181406
>>181393
Я работаю за деньги, но не программистом, хотя в айти (Business Intelligence Consultant - что-то между аналитикой и дата инженирингом), хочу добавить сюда питон на хорошем уровне, чтобы на лучшие места претендовать.
378 2181643
вот у меня есть список
[Not win, 395, Win, 342, Win, 374]
как мне найти максимальное число среди тех которые идут после win
изменять список нельзя
максимальное число не у победителя
у проигравшего самое большое число
а мне надо большее среди победителей
словарь не вариант
в нем не могут существовать два элемента с одинаковыми индексами
*ключами
они просто перезаписывают друг друга
379 2181651
>>181643
вьебать новый список только винов и в нем самое большое число найти?
380 2181713
>>181643
max([[<твой список>] for i in range(1, len([<твой список>])) if [<твой список>][i-1] == "Win"])
381 2181717
>>181643
Зипишь список с собой же со сдвигом и получаешь пары, ну а там заворачиваешь выражение в макс.
382 2181719
>>181713
max([[<твой список>] for i in range(1, len([<твой список>])) if [<твой список>][i-1] == "Win"])
Забыл
383 2181723
>>181719
а блять не забыл, это какая-то хуйня с форматированием
max([[<твой список>][x] for x in range(1, len([<твой список>])) if [<твой список>][x-1] == "Win"])
Вот бля короче
384 2181775
Как же хочется типизированные листы в питончике........
385 2181998
что-то я заебался...

как в aiohttp client подхватить и сохранить cookie, которые secure=1 , но я с этим сайтом общаюсь по чистому http внутри контейнеров и на самом деле шифрованный трафик только внаружу вылетает? клиент не сохраняет эти куки у себя, но обычные сохраняет.
386 2182313
Помогите с лабой,
Допустим есть диапазон дат.

start = datetime.datetime.strptime("21-06-2014", "%d-%m-%Y")
end = datetime.datetime.strptime("07-07-2014", "%d-%m-%Y")
TestedDate = datetime.datetime.strptime("26-11-2017", "%d-%m-%Y")

И проверка как находится ли дата в этом диапазоне

if start <= TestedDate <= end:
print (TestedDate, "Дата находится в диапазоне")
Else
print("Дата не находится в диапазоне")

Но препод требует чтобы было указан номер этой даты. Как вообще это реализовать?
В мыслях есть генерация массива, сравнивание TestedDate c датами в массиве и запрос номера этой позиции. Только хз как это сделать, единственный опыт в программировании был какулятор на делфи несколько лета назад.
999.PNG74 Кб, 1170x568
387 2182331
>>182313
три минуты в паинте
388 2182337
Может кто знает, есть телеграмм бот aiogram в котором пользователи могут искать через мою mysql свои данные, когда поиск происходит одновременно не более 2-х человек всё нормально, но когда их около 10-ти и более не хватает ресурсов и всё зависает. Как сделать последовательную выдачу результатов пользователям? Была идея все запросы записывать в таблицу ожидания и другая программа просто через каждые 10 секунд например её проверяла и выдавала результаты, как такой способ будет по эффективности?
389 2182348
>>182337
Подумай об оптимизации самой программы, а не о выделении ее в отдельный процесс. Десяток пользователей (лол) не должен вешать ни mysql, ни питон.
390 2182351
>>182348
У меня ещё сервер слабый всего 2гб, сколько вообще нужно для нормальной работы базы >1гб
391 2182354
>>182351
Чел, побойся бога, sql создавался для работы на компах с килобайтами оперативки. Ладно, с сотнями килобайт. Можешь немножко развернуть, что у тебя там программа делает?
оп-хуй.PNG124 Кб, 1463x288
392 2182367
>>181643
восемь секунд в пайнте
393 2182373
>>182354
Делает запросы вида:
SELECT FROM table1 WHERE (text LIKE '%tags%' OR title LIKE '%tags%')
SELECT
FROM table2 WHERE (text LIKE '%tags%' OR title LIKE '%tags%')
SELECT FROM table3 WHERE (text LIKE '%tags%' OR title LIKE '%tags%')
где tags может быть несколько:
SELECT
FROM table1 WHERE (text LIKE '%tags1%' OR title LIKE
'%tags1%') and (text LIKE '%tags2%' OR title LIKE '%tags2%')
SELECT * FROM table2 WHERE (text LIKE '%tags1%' OR title LIKE '%tags1%') and (text LIKE '%tags2%' OR title LIKE '%tags2%')
на каждого пользователя
394 2182381
>>182354

>Чел, побойся бога, sql создавался для работы на компах с килобайтами оперативки. Ладно, с сотнями килобайт.


Это ты конктерно загнул. SQL создавался в конец 70-х для серьёзных машин того времени.

> Although IBM’s System/R and SQL proved that relational databases were feasible, hardware technology at the time was not sufficiently powerful to make the product appealing to businesses.



> In 1977 a group of engineers in Menlo Park, California, formed Relational Software, Inc., for the purpose of building a new relational database product based on SQL that they called Oracle. Relational Software shipped its product in 1979, providing the first commercially available RDBMS. One of Oracle’s advantages was that it ran on Digital’s VAX minicomputers instead of the more expensive IBM mainframes.


Дальше смотрим, что из себя VAX представляли того времени:

> Первая серийная модель архитектуры VAX была представлена публике 25 октября 1977 года. Это была модель VAX-11/780 «Star» с процессором KA780 (29 печатных плат ТТЛ) и 4 МБ ОЗУ с коррекцией ошибок (ECC RAM).



То есть тут прямо сказано, что SQL всё-таки работал на довольно приличных машинах для того времени, вовсе не для примитивных.

По своей памяти, на машинах 20+ летней давности тот же MySQL можно было поднять, но это машины с 8+ мб памяти.

Конечно, 2Гб это абсолютный overkill, в этом ты прав. Просто всё-таки цифры другие были. На куда более слабых машинах работали веб сервера с большой нагрузкой, и ничего.

Надо анализировать, какие там запросы работают, сколько времени каждый запрос работает, почему они тормозят, может быть менять структуру запросов. Мне удавалось разгонять более, чем в 100 раз какие-то задачи на базе MySQL, просто корректируя запросы и чуть правя структуру БД.

Если проблема на 10 пользователях, то очевидно это проблема архитектуры базы и запросов, надо вот здесь смотреть, что происходит.
395 2182390
>>182381
У меня сейчас выполняется по одному запросу на таблицу:
SELECT FROM table1 WHERE (text LIKE '%tags1%' OR title LIKE
'%tags1%') and (text LIKE '%tags2%' OR title LIKE '%tags2%')
SELECT * FROM table2 WHERE (text LIKE '%tags1%' OR title LIKE '%tags1%') and (text LIKE '%tags2%' OR title LIKE '%tags2%')
не лучше ли всё это одним запросом выполнить?
396 2182397
>>182373
Вот если так писать, то не удивительно. Твоя СУБД вынуждена каждый раз полностью сканировать всю базу целиком на предмет вхождения tags.

Что такое tags, откуда они берутся? В каком виде они встречаются в тексте и заголовке?

В норме ты должен при сохранении текста в БД выделить тэги и сохранить информацию об этом в отдельных таблицах many-to-many (это как вариант). Тогда поиск будет быстрым.
397 2182403
>>182397
tags это слова поиска,
например text = 'Раз два три четыре пять...'
tags1 = два, tags2 = четыре, если они встречаются то выдаётся запись и так по 20+ таблицам
398 2182405
Ты лучше реальный пример запроса понажористей приведи, тогда понятно будет.

мимо килобайт-SQL
399 2182423
>>182403
Вот что происходит в твоём случае. Для каждого запроса вида 'like' MySQL будет сканировать с нуля базу, все записи последовательно. Если у тебя база в гигабайт, то весь гигабайт будет сканироваться. Каждый раз (!!!).

Тебе надо или менять архитектуру, чтобы не было запросов LIKE, либо же надо смотреть на другие решения вроде. По идее какой-нибудь ElasticSearch для таких задач предназначен, но я с ним не работал, не скажу точно, что он умеет.

Всё зависит от того, откуда берутся tags. Если это рандомные слова, которые пользователь может вводить, и таких запросов может быть много, то только вариант с альтернативными решениями. На MySQL такие вещи не делают, обычно ставят на форумах лимиты на количество таких запросов, если подобный функционал есть. Это может работать быстро, только если база небольшая и она вся в память помещается.

Если же tags лимитированы, то можно просто чуть базу переделать, избавиться от LIKE.
400 2182430
>>182405
SELECT * FROM table1 WHERE (text LIKE '%цифровой%' OR title LIKE '%цифровой%') AND (text LIKE '%медицинский%' OR title LIKE '%медицинский%') AND (text LIKE '%сервис%' OR title LIKE '%сервис%') AND (text LIKE '%«доктор%' OR title LIKE '%«доктор%') AND (text LIKE '%рядом»%' OR title LIKE '%рядом»%')
вот реальный, по 24-м таблицам которые выполняются последовательно, получили запись 1-й таблицы, сохранили, второй, сохранили, и т.д. запрос такой занимает 25 секунд.
401 2182435
>>182423
кол-во tags можно ограничить 5-ю, но есть ещё и tags которые не должны встречаться в тексте или заголовке
402 2182436
>>182423

>По идее какой-нибудь ElasticSearch для таких задач предназначен


Глянул, там очень серьёзные стартовые требования к железу и оперативной памяти в частности. Не для бюджетных VPS решение.
403 2182444
>>182430
Слово tag сбивает, тэг это понятие про другое. У тебя просто поиск по тексту.

Какого размера у тебя база, сейчас (когда 25 секунд работает) и в перспективе? Сколько записей с большими текстами и какого размера текст в среднем?
404 2182449
>>182430
Ради теста, попробуй изменить запрос на (условно)
select from table1 where (title like variant1 or title like variant2 ...) and (text like variant1 or text like variant2)

то есть перегруппируй title и text.

При этом для title можно сделать индексы, то там надо смотреть с размером индекса, размером записи title и т.п. Но даже без индексов стоит попробовать.
405 2182454
>>182449

>select from table1 where (title like variant1 or title like variant2 ...) and (text like variant1 or text like variant2)


fix, я идиот, это совсем другой запрос по выборке. Надо чуть подумать.
406 2182456
Аноны, я пишу бота для беседы на питоне. Кто-нибудь сталкивался с таким, что бот правильно реагирует на вступление юзера в беседу по приглашению другого участника (chat_invite_user), реагирует на удаление участника (chat_kick_user), но не реагирует на вступление в беседу по ссылке? (chat_invite_user_by_link)

То есть, это же события одного порядка, почему он одни обрабатывает, а другие нет?
407 2182458
>>182444
сейчас 4 гб в дальнейшем скорее всего будет не более 10-ти гб
408 2182463
>>182458
и я кстати понял при каких причинах виснет, даже один пользователь может обрушить вбил теги:
"ла ла ла" и когда кол-во результатов превысило 60000 память закончилась и запустился своп
409 2182469
>>182463

>когда кол-во результатов превысило 60000 память закончилась


Надо сразу добавлять LIMIT N в SQL запрос. Чтобы в любом случае выборка была ограниченной.
410 2182485
>>182436
блядь, ну заплатишь. задачу же решать надо.

посмотри еще библиотеку http://sphinxsearch.com/
но это примерно те же яйца, но без java-энтерпрайза. ресурсы в любом случае нужны.
411 2182487
>>182458

>сейчас 4 гб в дальнейшем скорее всего будет не более 10-ти гб


Для VPS это довольно много, ты не можешь поместить всё в оперативную память. Хотя в условиях выделенного сервера это не проблема для таких объёмов.

Суть проблемы в том, что каждый запрос сейчас у тебя требует, чтобы все 4 гб были загружены последовательно из диска в память и проверены на вхождение. Поэтому долго работает.

SQL базы не предназначены для полнотекстового поиска.

Вообще полнотекстный поиск это серьёзная задача, простых решений тут нет. Вот для твоего примера не получится сделать так, чтобы переписать запрос и всё за секунду после этого бы работало.
412 2182496
>>182485

>блядь, ну заплатишь. задачу же решать надо.


поддерживаю, хотя ты не мне отвечал, а не анону, что запрос делает.

Если это не пет-проект, а коммерческий проект, где ты на зарплате, то надо просто ставить вопрос, что нужен выделенный сервер. Цена вопроса на уровне 100 долларов в месяц, копейки по сравнению с зарплатным фондом. По моему опыту кабаны чаще очень легко идут на траты на железо, просто внутренний комфорт есть, типа серьёзный проект = серьёзное железо, а не детская VPS.

Тогда ставится уже полноценный софт, вся база помещается в оперативку и поэтому работает очень быстро. Прикручиваются сторонние решения для поиска, или NoSQL по необходимости.

Но я думаю, даже обычный SQL ускорится на порядок, если ему выделить памяти достаточно, чтобы всё в оперативку влезало.
413 2182518
>>182487

>SQL базы не предназначены для полнотекстового поиска.


причем, все равно умеют его делать. без особенных проблем с производительностью. вопрос только к качеству.
414 2182560
>>165167 (OP)
Есть годный видеокурс по фласку? Чтоб прям все тонкости были.
415 2182585
https://www.youtube.com/watch?v=0kyy_zKO86U

там годнейшая обнова приехала
416 2182652
>>178180
nuitka
417 2182683
>>182652
возможно
418 2182745
>>182331
Спасибки
419 2182937
Сап, двощ, есть код, ищет подстроки в строке, сделал логически просто, но безумно медленно. Как его ускорить, не юзая регулярные выражения? Выводит первый индекс первого совпадения. Вроде больший шаг итерации не запилишь, или вообще подход менять

A='qwerwq er bababaobaber okayuo misaka'
B='ba@ba'
D=B
at=[]
for i in range(len(B)):
if B=='@':
at.append(i)
n=0
while 1:
C=A[n:n+len(B)]
for i in at:
D=D[0:i]+C+D[i+1:]
if n==len(A)-len(B):
print(-1)
break
if C!=D:
n=n+1
else:
print(n)
break


прога вырезает участок оригинальной строки длины подстроки, заменяет собачки подстроки на символы оригинальной строки и собстно сравнивает получившиеся штуки.
image.png30 Кб, 608x527
420 2182938
Спасибо за табуляцию
421 2182976
>>182938
Как будто человек из мема про выучить си за 21 день пытается в змею.
422 2182985
>>182976
Так я и учу змею 21 28 дней. Хз как тут без регулярных лучше сделать
423 2182987
>>182985
Смысл поста был не про 21 день или попытки, а про си.
424 2182989
>>182987

>:с


Просто не видел этот мем
425 2182990
Братья по Питону, как часто вы на работе или в пет прожетках используете рекурсивные функции? Удобны ли они, полезны ли они?
426 2182991
>>182990
Питон не любит рекурсию. Лучше через цикл с очередью переписать если есть возможность
427 2182992
>>182991
В каком смысле не любит?
428 2182996
>>182938

>while 1


Ты учебник по второму питону смотрел?
429 2183006
>>182996
причём тут второй питон?

паттерн
n = 0
while 1:
____if n==len(A)-len(B):
________print(-1)
________break
____if C!=D:
________n=n+1

было бы разумно заменить на
for n in range(len(A) - len(B) + 1):
____ calculations
____ return in success

print(-1) # если не вышли из цикла через return, то ничего не нашли

но только мне всё равно не нравится.

уж скорее лучше ближе к Си переписать, чтобы не создавать сначала строку и потом сравнивать её, а просто посимвольно в цикле сравнивать, и игрорировать символ @. Для маленьких строк должно быстрее работать, но для больших шаблонов, где мало @, будет хуже
430 2183009
W] PL (VPS-WAW2).
опци
Програмісти, хто знає?? як зробитм шоб всі вклабки адресу з цього сайту автоматично замінялись на 2c-pm. я не можу все вручну записувати довго

Макс объем: 300Mб, макс кол-во файлов: 4
КЛИКНИ/БРОСЬ ФАЙЛ/CTRL-V
431 2183010
>>183006

>Для маленьких строк должно быстрее работать, но для больших шаблонов, где мало @, будет хуже


Не, чего это я, для больших обычно будет как раз лучше, потому что очень быстро можно отлавливать несовпадения, не конструируя всю строку.

В приведённом коде меня больше всего вымораживает конструкция
for k in at:
____D = D[0:k] + C[k] + D[k+1:]
432 2183011
>>183009
Learn English!
image.png100 Кб, 1117x793
433 2183042
image.png97 Кб, 904x807
434 2183045
435 2183049
>>183045
а еще можно сэкономить две строки, если оба
probe = input_string.find(start_token)
засунуть модным моржом в
while (probe := input_string.find(start_token)) > -1:
но это как-то менее читаемо
image.png43 Кб, 520x398
436 2183057
>>183045
>>183049
Ну чел, ну сложно ведь. И медленно. Вот у тебя вариант 44 мс, а мой 10-12 мс
Вот тут пример: https://ideone.com/1HfYnv

Реально тут код на строчках 4-15, остальное подсчёт времени.
12 строк кода вместе со строкой комментария, на твоём примере меньше 10мс работы против 44 мс у тебя.
image.png43 Кб, 507x398
437 2183058
>>183057
бля, иногда я сам ненавижу эти блоки пробелами.
вот так надо: https://ideone.com/DHA94i

хотя предыдущий вариант корректно работающий, более того, в каких-то случаях даже чуть более быстрый.
image.png46 Кб, 800x988
438 2183085
>>183057>>183058

>у тебя вариант 44 мс, а мой 10-12 мс


Чувак, серьезно? Мерить время выполнения по сообщению из редактора, включающего запуск интерпретатора? Ну держи, обтекай
https://ideone.com/IfWZRI
439 2183251
Пацаны, Пуйчарм при написании кавычек для строк не закрывает их автоматом. Шо это?
Накатил Пучарм на новую ОС (Линух)
440 2183293
Как сделать так чтобы доступ по разным ключам ссылался на одно и то же значение?
Вот есть у нас словарь, где имена заранее отсортированы по группам, например:

Petya, Vasyan
Anton, Vasgen, Ramil

Значение для каждого из этих имен - число integer. Я могу его изменять, и когда изменяю его для одного из ключей в определенной группе то оно изменяет и для всех других, например сделал my_dict['Vasyan'] = 100, и теперь в том числе и для my_dict['Petya'] будет возвращаться 100
442 2183321
Как проверить работу тсп сервера на питоне?
443 2183511
>>183085
Теперь попробуй вместо шаблона 'sr@l' подставить шаблон '@sr@l'

Твой скрипт выдаёт None. А должен был выдать 2.

Переусложнено, отсюда ошибки.

Не, я понимаю идею, которую ты хочешь реализовать, но невозможно разобрать твой код, не хочется кучу времени убивать на это. Много "оптимизаций" и не понятно, как обрабатываются особые случаи, которые возникаю. Вот как в случае, когда '@' в начале шаблона. Или когда в конце, там другой баг.
444 2183518
https://ideone.com/bfNutq

Парни, хуярю элементарный параллелизм на multiprocessing. Вот вроде обычная функция которая возведет все эелементы массива в квадрат. Внизу нахуярен объект MyTimer исключительно для подсчета времени исполнения. Как видите, время у синхронного и параллельного вариант практически то же ("параллельный" даже умудрился отсосать). Шо тут не так?
445 2183545
>>183518
Во первых у тебя опечатка, ты два раза вызываешь функцию test1.

Во-вторых, использую контекстный менеджер для Pool
with mp.Pool as pool:
____data = pool.map(func, splitted)
return data

Наконец ты не видишь прироста потому, что главные затраты времени на подготовку списка, разбиение его на куски, пересылку в процессы и т.п. Поэтому ты ничего не выигрываешь.

Попробуй использовать более сложные вычисления, чем возведение в квадрат, вот как в моём примере
https://ideone.com/O1MNl8
(на ideone пускают в один поток, поэтому там нет ускорения)
и ты увидишь прирост производительности
446 2183558
>>183545
3.3396499156951904 secs elapsed for Sync
1.1430809497833252 secs elapsed for Parallel


Хм, и правда, когда стал юзать хитрожопые умножения во вложенном цикле, прирост появился

>главные затраты времени на подготовку списка, разбиение его на куски


But wait... разбивать список на чанки - это вообще задача по хуйне для питона, оно за константное время происходит. Да и чанков тут всего 10
447 2183569
>>183558
Тебе данные надо нарезать, сериализовать для отправки в процессы, потом из этих процессов эти данные получить и сохранить в основном процессе. Это главная работа. В то время как само умножение работает очень быстро.
448 2183678
>>183057
блять, код балдежный но так же как и мой хуевый по времени пролетает для строки из 86к символов. Буду думать.
449 2183778
А че, есть ссылку на конфу в тг какую-то небольшую двачевскую? Чтобы лампово было.
450 2183783
Короче, собираю тестовую платформу. Для строки использую строку
str(13 ^ 100500)
(в смысле 13 в степени 100500, преобразовать к строке, так как звёзды двач съедает)
Получается строка в 111962 символа
В ней ищу подстроку
'637036977498347229246'
по шаблону
'63@036@7749@347@29@46'
она находится на позиции 110890

Мой вариант на питоне 3.8 на моём ноуте работает за 60мс, на 3.6 кстати быстрее, 55-60мс. На 3.10 те же 60мс

Сделал разогнанный вариант, ближе к стилю Си, работает за 22-23 мс. Намного веселее, но при этом просто поиск подстроки без шаблона работает за 0.1мс, совсем другой порядок.

Контрольный вариант с re, самый примитивный и не оптимальный, работает за 0.5мс.

В общем очевидно, что есть куда разгоняться, но в питоне довольно сложно.

Вот вариант, тут старая версия, другая версия и контрольный вариант с re
https://ideone.com/qXEX33
451 2183830
>>183783
>>183678
Самая проблема в производительности это вложенный цикл, циклы в питоне медленные.

Если ставить задачу разгона и без re, то возможен вариант с тем, чтобы сгенерировать сначала код без циклов, а потом этот код выполнить через compile+eval

Тогда, думаю, в несколько раз можно ускорить.

Вообще обычно всякие шаблонизаторы на разных языках так и работают. По шаблону сначала генерируется код, раскрывающий шаблон, а потом полученный код уже выполняется. Даже в Си были такие регулярки в древнее время. Все эти джинджи примерно так устроены.
452 2183957
>>183045
вот это прошло. Загнал строку в 700к знаков, очень быстро скушалось, ну и допилил случай нескольких собачек в начале паттерна,+ упростил, чтоб самому понять. Прям круто, спасиб
453 2183981
>>181717
xs = ['Not win', 395, 'Win', 342, 'Win', 374]
max(filter(lambda x: x[0] == 'Win', zip(xs[::2], xs[1::2])), key=lambda x: x[1])
454 2184021
что-то туплю, помогите пожалуйста.
надо получить строку из 2 строк, складывая по-символьно.
string = ''.join(lambda x,y: x,y from s1, s2)
где я ошибся?

пример - строки s1 = ГОВНОГОВНО s2 = ПИЗДАПИЗДА.
на выходе должно получиться ГПОИВЗЕДОАГПОИВЗЕДОА.
455 2184026
>>184021
В синтаксисе.
from itertools import zip_longest
result = ''.join(c1+c2 for c1, c2 in zip_longest(s1, s2, fillvalue=''))
456 2184029
>>184026
string + ''.join(map(str.__add__,s1, s2))
вот такой придумал, но он не добавляет конечные элементы при разнице в длинах изначальных строк. можно обойти через cycle, но да, зип_лонгест проще.
спасибо.
457 2184033
>>165167 (OP)
Что надо прописать в sql запросе, чтоб создать таблицу с поддержкой кириллицы в названии?
f"""CREATE TABLE {user_request['name']}(
id INT AUTO_INCREMENT PRIMARY KEY,
send_massages VARCHAR(1000),
get_massages VARCHAR(1000));""")
458 2184035
>>184033
но зачем?
460 2184040
>>184035
Ну я хочу чтоб у меня создавалась таблица при регистрации пользователя, для того, чтоб туда сохранять туда его контакты и переписку, типа бекенд для чата хочу сделать, ее же надо сохранить под каким-то именем.
Снимок.PNG70 Кб, 486x643
461 2184041
Сап, вкатываюсь в вашу дрочильню. Как лучше всего оформлять таблицы вроде пикрилейтед, чтобы я потом мог имея значение например 800 найти в табличке нужную строку?
462 2184042
463 2184045
>>184042
Можешь привести пример из той пикчи на пару строк и столбцов?
464 2184048
>>184045
temperature_dict = {
____100: {
________'O2': 24.1448,
________'N2': 20.705
____},
}
Снимок.PNG27 Кб, 1481x568
465 2184049
>>184048
Спасибо, няша, все заработало. А то я сначала подумал что эти словари работают как пары ключ-значение, а оказывается можно вкладывать. Лучший тред в этом разделе.
466 2184051
>>184040
https://www.postgresql.org/docs/12/multibyte.html#CHARSET-TABLE

лол >>184037 уже скинул.
>>184041
temp = {'Температура ':'O,H,C,M,N','000 градусов':'1,2,3,4,5', '100 градусов': '5,4,3,2,1', '200 градусов': '5,4,3,2,1'}
print("{}\n{}\n{}\n{}".format(*temp.items()))
я бы с форматированием строк поигрался.
вообще, можно выводить это списками, '\t'.join(arr[])
467 2184421
>>184041
Использовать pandas
468 2184461
>>183957
>>183830
Вот вариант этой идеи с токенами
https://ideone.com/g6YGpn
сама функция на строках 15-39, там ещё функция для тест-кейсов каких-то, поэтому много кода

На тестовом примере >>183783 работает меньше, чем за 0.2мс вместо 20мс ранее. В 100 раз ускорение. Получается даже быстрее, чем работа через re
469 2184497
470 2184515
Ебаный рот вашего тридесятого питона вы зачем всё поломали
Беды как у этого пчелика
https://stackoverflow.com/questions/69527805/python-cannot-install-cryptography-command-errored-out-with-exit-status-1/
А я всего лишь хотел похешировать пароль
471 2184525
>>184515
чел дохуя библиотек еще не перешли на 10 пятон, это нормально. через пару месяцев все будет.
472 2184534
>>184515
Ты самый модный у нас шо ле? Юзай 3.6 и не выпендривайся
473 2184539
Есть список в котором хранятся кортежи по 3 числа типо:

[ (0, -1, 4), (-5, 2, 7), (-1, 4 ,0), (2,9,1) ]

Как оставить только кортежи с уникальными комбинациями? То есть в примере выше убрать (-1, 4 ,0) или (0, -1, 4)
image.png32 Кб, 225x225
474 2184543
>>184525
>>184534
у меня дистрибутив с rolling release и думал че там минорное обновление, а тут что-то и venv начало похрюкивать и потом
всё откатывать что ли? пиздос
думал не спешить с докер контейнером и потом сделать, а тут такое
475 2184545
ну че петухонисты, сколько платят нк$/сек?
476 2184557
>>184539
Ну как-то так https://ideone.com/IpN0pP
Но есть поизящнее решение, думаю.
477 2184605
>>184539

r = functools.reduce(lambda acc , val: acc.update((sum(val), val) [(0, -1, 4), (-5, 2, 7), (-1, 4 ,0), (2,9,1) ], {})

list(r.values)
478 2184622
>>184605
Соснешь с одинаковыми суммами.
479 2184645
>>184622
Ну тогда поксорить вместо суммы.
480 2184649
>>184645
Ничего не поменяется.
481 2184655
>>184649
print(0 ^ -1 ^ 4)
// -5
print(-1 ^ 0 ^ 4)
// -5
print(1 ^ 0 ^ 2)
// 3
482 2184661
>>184655
>>184649
ладно забей, я даун
483 2184863
проигрываю с того, что мне как пайтон кодеру надо устанавливать gcc g++ make
484 2184870
>>184863
Когда джаваскрипт проект тянет гигабайты зависимостей, то это гораздо смешнее.
image.png9 Кб, 566x123
485 2184885
486 2184890
>>184885
Норкоман штоле?
487 2184962
Как правильно сделать структуру приложения, чтобы была точка входа и нормально всё импортировалось? Как вы делаете?
488 2184984
>>184539
{tuple(sorted(item)) for item in input}
489 2184988
>>184984
Похерятся оригинальные тупли.
490 2185023
>>184988
они по заданию одинаковые не зависимо от порядка элементов. те они, даже отсортированные, всё еще оригинальные.
491 2185048
https://docs.python.org/2.7/library/sys.html#sys.setrecursionlimit

> A user may need to set the limit higher when she has a program that requires deep recursion and a platform that supports a higher limit.



https://docs.python.org/3.5/library/sys.html#sys.setrecursionlimit

> A user may need to set the limit higher when they have a program that requires deep recursion and a platform that supports a higher limit.



Обзмеился.
4353423423.PNG165 Кб, 1642x547
492 2185062
>>184539
пять минут в паинте
493 2185065
>>185062
Ебать хайвмайнд
494 2185082
>>185062
Что за редактор?
495 2185085
>>185082
блокнот
496 2185087
>>185085
ну в pycharm такое говно работать не будет
497 2185088
>>185087
поридж, ты обезумел?
498 2185089
>>185088
чома?
499 2185091
>>185089
pycharm это всего лишь IDE, как и блокнот
Будет работать на любом интерпритаторе
чому вас вообще учат, на этих ваших курсах
500 2185168
>>182436
В постгресе есть индексы для полнотекстового поиска
http://komar.in/ru/mongodb-не-нужна
501 2185175
>>185082
Жупитер ноутбук
502 2185191
>>185062
*{tuple(sorted(item)):item for item in input}.values()
503 2185542
>>169012
Напиши свой сериализатор и обмажь его методфилдами

мимо
505 2185692
>>169012
return mapToResponse(service.getObject(id))
image.png25 Кб, 699x197
506 2186410
Есть класс и в нем метод addmit (там еще куча всего, я все неважное обрезал). Так почему компилятор говорит:
AttributeError: type object 'meetlist' has no attribute 'meets'?
image.png25 Кб, 699x197
507 2186422
>>2185611 (OP)

Есть класс и в нем метод addmit (там еще куча всего, я все неважное обрезал). Так почему компилятор говорит:
AttributeError: type object 'meetlist' has no attribute 'meets'?
508 2186751
>>186410
Потому что meetlist - это название для класса, а объявлять переменные нужно у экземпляра класса, для него всегда зарезервированно первое место параметров у методов внутри классов, которое обычно называют self. поэтому надо исправить: meetlist.meets = [] на self.meets = []
509 2186803
>>169794
кастомизацию внутри crm
1.JPG27 Кб, 639x231
510 2201503
День третий, как начал изучать энто ваше погромирование. Не знал, что это может быть так весело. Чем можно развить эту хуйню?
511 2209951
>>201503
Начни с того, что все, что ниже объявления списков, заменяется одной строкой:
print(random.choice(names), random.choice(surnames))

Вжух и 5 строк в одну.

А вообще пока продолжай изучать, чуть подтянешь язык - цепи Маркова помогут с генерацией текста.
512 2243227
>>165167 (OP)
Сортировать массовчики это конечно хорошо, но вот думаю, ведь многие знают канал Ильи Климова, а есть ли такой же образный Климов но в мире питона ? Можно даже на английском, но лучше на русском офк
513 2243228
>>165549
На 3 лучше, мне кажется, Джанго это монолит, сделав чутка асинхронности тут, чутка там, в общем результат вряд ли сильно лучше, поскольку дофига остального включая библиотеки на синхронных решениях
Тред утонул или удален.
Это копия, сохраненная 13 мая 2022 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски