Анон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы: https://ideone.com/ - возможность постить листинги кода и онлайн-запуска, не требует регистрации https://dumpz.org/ - можно постить листинги, не требует регистрации https://pastebin.com/ - для листингов, регистрация не обязательна https://www.codepile.net/ - можно расшарить код в том числе на редактирование, особая полезная опция - чат при каждом листинге, где можно код обсудить https://pyfiddle.io/ - запуск python кода онлайн, но чтобы шарить, надо регистрироваться
Вопросы-ответы: — А стоит ли читать Лутца, том номер N? Мнения в треде разделены. Кто-то за (очень неплохая база даётся), кто-то против (слишком много воды и объём книг убивает всё рвение). В общем — решать тебе, книга вредна не будет, но ты можешь её просто не дочитать и забросить.
— Стоит ли читать %книга_нейм%, если там питон версии 2.х? Нет, не стоит. 100% есть более актуальная книга, для пистона 3.х
— А что ещё можно читать? Питон сам по себе очень хорошо задокументирован и для уровня начинающих, и для продвинутого. Смотри официальную документацию. Можно начать вот с этого https://docs.python.org/3/tutorial/introduction.html
— Что можно почитать/посмотреть по многопоточности/параллелизации в питоне, да и вообще в целом? Очень годный ролик на американском языке про многопоточность и асинхронность https://www.youtube.com/watch?v=MCs5OvhV9S4
— А как учить джангу? Нахожу только книги по джанге 1.х У джанги отличные доки (одни из лучших для пистоновских либ, имхо), почитай их для начала. Книгу по джанге можно читать и для версий <2, это не проблема, т.к. принципы остаются теми же. Для переката на 2.х хватит changelog`a или тех же самых доков/статей. Начни изучать с разбора учебного приложения с голосовалкой из официальной документации.
— В ньюфаг-треде написано, что нужно начинать с SICP, чтобы научиться программировать Вот, пожалуйста, та же самая программа, но переработанная под язык Python: http://composingprograms.com/ (нужно знать ангельский или уметь пользоваться переводчиком)
— Как можно без лишней возни ускорить программу на питоне 1) проверь сначала свой код, алгоритмы и структуры данных. Чаще проблема здесь. 2) код можно иногда феерично ускорить, используя JIT (Just-in-Time) компиляцию. Почитай обязательно про модуль numba, он ставится через pip, и альтернативный интерпретатор PyPy.
— Дайте нормальные книжки на русском! Мы, блядь, не в пиндосии живём Брат, смотри книжки по ссылкам в шапке, там есть и русские. Но помни, без языка ангелов твоя жизнь проходит мимо и ты обречён быть на обочине знаний и технологий.
ps: анон, если ты вносишь изменения в шапку, оставляй ссылку на код с обновлённым исходником. Исходник: https://dumpz.org/bASGKD8cCFDf
>>2428668 Я дид и всегда хуярю процедурщину, если кто-то до меня не насрал ооп. Глобальные переменные, пробрасывание в десять функций, хули ты мне сделаешь?
Не подскажете, я использую djoser для всех там дел с авторизацией/регистрацией с drf. И хочу перевести сообщения об ошибках, которые он посылает в ответ. Я посмотрел, в исходном коде эти сообщения обернуты в геттекст, но когда я делаю makemessages, нихера не делается. Не понимаю, че нужно сделать, чтоб он их оттуда выдернул ко мне в проект.
Сап двач, хелп плиз. Что означает эта запись, а точнее многоточие в объявлении функции? Почему если присутствует многоточия, я не могу прописывать операторы функции? def func(x): ...
Мужички, помогите с питоном. Есть один словарь. Ключи - буквы, значения - цифры. Надо отсортировать его так, чтобы значения были от большего к меньшему и при этом, если значения у ключей одинаковые, чтобы сортировались в алфавитном порядке. В качестве наглядного примера: Словарь: {'m': 3, 'a': 3, 'y': 1, 'r': 1} Что хочу получить на выходе: {'a': 3, 'm': 3, 'r': 1, 'y': 1}
>>2429264 Всю программу скидывать не буду, вот кусок, где идет сортировка(сортируемый словарь в переменной "unique", результат пишется в .txt файл в папке с программой): lst = [] for _, value in enumerate(unique.items()): lst.append(value) lst.sort(key=lambda x:(-x[1], x[0])) output_file = open('analysis.txt', 'w') for i in lst: print(*i, file=output_file) Помидорами не забрасывайте, я в программировании полный ноль
А еще метод .items() и так возвращает список пар кортежей словаря ключ-значение, но я нахуя то прогнал каждый кортеж отдельно через цикл и запихал в новый список. Пиздец позор. Как научиться нормально кодить? Я частенько вот такую вот херь исполняю
>>2429347 только если исходный словарь отредактировать, там в 1м ключ 3 - значение пизда, а во 2м ключ пизда - значение два. и в 1м 2: "vzxcv", во 2м "vzxcv": "tri". Вот если это местами поменять изначально, то получится. Хз правильно или нет, но можно типа так сделать:
Сап, жвач. Я знаю, что этот вопрос вас всех заебал, но сейчас просто я в отчаянии и не знаю, что делать. Я сыч 20 лвл, который выкатился только что из ПТУ. Могу немного писать на питоне, хорошо знаю за линекс, гит, протоколы и прочее говно. Из опыта писал сайт для одногрушников для решения говнотестов через уязвимость на одном говносайте и еще по мелочи скрипты для себя. Писал интерпретатор брейнфака, еще автопостинг для двача
Вопрос: могу ли я устроиться питон разработчиком? А удалённо? Как вообще это происходит? Где искать работу? Как проходят собесы? Как определить мой уровень программирования, достаточный для работы?
Проблема в том, что 1) я боюсь работать и никогда не работал 2) живу в мухосрани и тут программисты только на завод на С++ нужны с опытом С меня сотни нефти и картинки с Курису
>>2429387 >Могу немного писать на питоне, хорошо знаю за линекс, гит, протоколы и прочее говно. Из опыта писал сайт для одногрушников для решения говнотестов через уязвимость на одном говносайте и еще по мелочи скрипты для себя. Писал интерпретатор брейнфака, еще автопостинг для двача Ты шутишь? Это уже уровень крепкого джуна. Посмотри, что там у тебя в мухосрани требуется, это и подучи. > 1) я боюсь работать и никогда не работал Так и говори на собесе, врать не надо. >живу в мухосрани и тут программисты только на завод на С++ нужны с опытом удаленка, либо переезд из мухосрани в город.
>>2429393 Я ходил устраиваться на работу сисадмином в одну геймдев конторку по советам психологини из птк. Пик - то, что написала психологиня. Если честно, не очень уверен в навыках своих. >удаленка А как это происходит? Мне надо резюме выложить на hh? >либо переезд из мухосрани в город Ну, город это областной центр. Это между дс1 и дс2, но и там, и там дорого жить >Ты шутишь? Это уже уровень крепкого джуна. Мне кажется, ты шутишь. Аноны говорят, что джунов никто не ждет, всем нужны мидлы
>>2429396 >Я ходил устраиваться на работу сисадмином в одну геймдев конторку по советам психологини из птк. Пик - то, что написала психологиня. Если честно, не очень уверен в навыках своих. А нафига сисадмином-то, если ты разработчиком хочешь стать? Или ты еще и в сетях и линуксах шаришь? Тогда дополнительный + тебе. Тоже говори об этом на собебе, ИТ бэкграунд тоже решает, даже если ты из сисадминов в разрабы идешь. >А как это происходит? Мне надо резюме выложить на hh? Ну да. На работу ру, на хабр карьеру. Везде резюме выкладывай и стучись в вакансии, где требуют год опыта. Говори, что опыта нет, но умеешь то, то и это, для себя писал такую штуку (можешь на гитхаб выложить, показать). Говори, что ты обучаем, умеешь работать с инфой. Не вымаливай собеседование, просто продавай себя как перспективного чела, из которого компания может слепить джуна. Алсо, некоторые компании просто мониторят резюме, а вакансии не выкладывают, т.к. дорого. Вроде читал об этом на Хабре, могу ошибаться. Т.е. вакансий по факту больше, чем на хх.ру. >Ну, город это областной центр. Это между дс1 и дс2, но и там, и там дорого жить Тогда только удаленка. Или можешь съездить в ДС на собес, вдруг они тебе удаленку разрешат. Вряд ли, конечно, но попытаться подать резюме в ДС и ДС2 стоит. >Аноны говорят, что джунов никто не ждет, всем нужны мидлы Меньше слушай, что тут пишут. После февраля они нужны меньше, но все равно потребность есть. Из кого-то же надо миддлов делать, кто-то же должен делать мелкие таски.
Советую тебе качественно оформить резюме, чтобы херки тебя заметили. Погугли, как это делается.
И почему именно питон? Куда хочешь? В веб, датасаенс, нейронки?
>>2429402 >А нафига сисадмином-то, если ты разработчиком хочешь стать? Ну я по образованию техник. А так, да, вообще сетевик. Занял даже первое место на говноконкурсе по сисадминству. После часто там был экспертом на этих конкурсах. Немного за сети шарю, сервера там, пачкорды обжимаю. Блочный ремонт техники еще по мелочи. Паял. Ну это хуйня >И почему именно питон? Куда хочешь? В веб, датасаенс, нейронки? Ну, я питон давно начал учить для себя чисто, потому что название понравилось. Я много языков пробовал, понимаю сишный синтаксис, но питон знаю лучше и был опыт. Я вообще люто по линуксам угарал, поэтому как-то втянулся в сети. Но мне хотелось еще пентестить вебприложухи, а для этого надо писать скрипты. Это было интересно. Например, засрать один дочерний сайт вуза гифками с гомонигграми, вот это охуенно. А для этого надо автореггер написать и чтобы оно как-то куки держало, а еще и впн протянуть, чтобы не спалили. Короче весело. Нейронки и датасайснюс это мб и интересно, но, наверное, не для меня. А веб это куча говнокода и ебли. Но я бы, наверное, хотел бы писать бэк, обрабатывать запросы и такую хуйню. Это я немного понимаю >>2429402 >для себя писал такую штуку (можешь на гитхаб выложить, показать Я говорил на собесе, что писал, но одно название брейнфак их походу смутило. Да и вообще говорить,что я что-то там через уязвимость делал такое себе. Хотя хз, тебе виднее >сисадминов в разрабы идешь. Я ниоткуда не иду. Я хуй с горы. У меня нет опыта
>>2429406 Отправляй резюме, доставай херок по телефонам/почте.
Навыков у тебя хватает, ты не нулевой вкатыш с курсов уже. Рано или поздно работу найдешь. Если есть время - сделай пет. Апи какое-нибудь или приложуху.
>>2429632 Ну, тщемта, асинкио это инородное образование в питоне, выходит за рамки базовых либов. Я не читал и не щнаю кто такой луц, но наверняка он описывает только базу языка, без фреймворков и уж тем более вряд-ли описывает различные подходы у разработке
>>2429061 Это просто константа https://docs.python.org/3/library/constants.html#Ellipsis Можешь в своем примере написать def f(x): None или def f(x): 42 с тем же эффектом (т.е. никаким). В таком контексте это часто используется с той целью, чтобы указать, что код предстоит дописать. Ну а так можно использовать как синтаксическую примочку для своих классов, реализующих доступ по ключу (https://ideone.com/QZdkVM) или по хитрым слайсам (как в numpy).
>>2429639 Начиная с версии 3.5 уже полноценно интегрированное, есть операторы async/await, есть куча других асинхронных операторов, которые просто так не прикрутишь.
Луц просто говно мамонта, очень объёмное и устаревшее.
Сам питон изменился, когда его придумывали, была идея сделать максимально простой язык для непрограммистов, однако по мере развития от становился всё более сложным и инженерным.
Плюс для изучающих только в том, что никто не заставляет писать сложно, можно писать просто и это будет работать.
Есть папка проекта, в ней несколько папок со скриптами, скрипт из каждой папки надо запустить. Можно сделать файл условно main.py в корневой папке, запуская который будут запускаться все скрипты с этих папок?
>>2430012 Можно сделать и чисто на питоне. Просто найти все файлы, через glob.glob, и запускать субпроцессы. Можно при этом менять рабочий каталог на каталог файла со скриптом.
На проекте какое-то животные пару лет назад поставило в джанго-модельках managed = False и теперь автоматические миграции там не создать, поменять на True не выходит т.к. сыплется куча ворнингов о замененных колонках Джанго-дебилы, почему вы такие конченные?
Ужики, помогите. Короче сделал я парсер по туторам, но добавил изюминку так сказать о себя. Так как я нулёвый, то не смог нормально вытащить с сайта автодилера вин-код авто. но придумал, что его можно со ссылки взять, ведь он там есть. Так вот у меня вопрос, как почистить ссылки от всего ненужного, а оставить только цифры вин-кода? При том, что ссылки не всегда одинаковые-какого то хуя. Это лучше сразу в парсере сделать или в эксель таблице как-то почистить?
>>2430138 >>2430245 >>2430246 Спасибо. Бат-файлом не хочется делать, я недавно тут и вообще не понимаю мульки в 2022 возиться в командной строке (хотя выглядит это прикольно иногда). Нашёл модуль subprocess, попробую через него.
Кстати, как научиться читать без попаболи оригинальные доки? Я про subprocess.run(args, , stdin=None, input=None, stdout=None, stderr=None, capture_output=False, shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=None, text=None, env=None, universal_newlines=None, *other_popen_kwargs) п, мне прям фул хуёво и непонятно от такого. Меня одного это демотивирует читать? Документация на BeautifulSoup нормально читается/воспринимается, а такой формат...
>>2430740 >вообще не понимаю мульки в 2022 возиться в командной строке Чел... много чего можно про это сказать конечно, но советую заскринить тебе этот твит пост и пересмотреть через полгодика. Ты небось и поделки свои через F5 в идешке запускаешь?
>>2430740 >Я про >subprocess.run(args, , stdin=None, input=None, stdout=None, stderr=None, capture_output=False, shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=None, text=None, env=None, universal_newlines=None, *other_popen_kwargs) п, мне прям фул хуёво и непонятно от такого. Это одна из крутых фишек питона, которая есть не во всех языках. В ЖС нет, например. Называется "именованные аргументы со значениями по-умолчанию".
В данном случае тебе только первый аргумент указывать обязательно, все остальные параметры это возможность дополнительной настройки тогда, когда потребуется. Читается легко и непринуждённо в основных доках.
Хотя вокруг субпроцессов есть какая-то магия по части блокирующего ввода-вывода и т.п. Но это актуально, когда тебе необходимо интерактивно взаимодействовать с субпроцессом, читать в реальном времени его вывод и т.п. Когда не надо, тогда всё тривиально.
суп вопрос не совсем по питону, но есть питон 3.10, есть пайчарм. клонирую проект с гитлаба, настраиваю интерпритатор для проекта - всё работает, но. работают только базовые пакеты. если я ставлю условный termcolor pysimplegui или типа того - в проект я из просто не могу импортировать, пайчарм их не видит. если я напрямую обращаюсь через консоль к питону, он говорит что пакеты установлены. я уже не знаю на что грешить, подмывает форматнуть ноут и накатить линукс, ибо под линуксом у меня такой хуйни нет.
>>2431228 ебать ты токсичный кусок дерьма. >>2431233 питон стоит только один. пакеты даже лежат в правильных местах (проверял sys.path). в списке help("modules") тоже всё верно.
>>2431593 Ну так какие тогда вопросы, если ты пакеты глобально ставишь, а пч венв юзает? Ставь в венв или ищи там в настройках галку наследования глобалов.
Например, есть while, который переворачивает произвольное число, и проверяет, что на выходе оно получается упорядоченное по неубыванию.
Моя реализация - два if которые проверяют, что прошлое число больше нынешнего. Второй if используется для остановки цикла, если нынешнее число больше прошлого, приравнивая число к условию остановки, то есть нулю.
Как улучшить эту хуйню, чтоб флаг заменил второй if и условие остановки, например.
В реальных задачах таких ситуаций никогда не встретится. Потому что сама конструкция int(input()) это ебантизм невероятный. Соответственно вы решаете случай которого вообще не должно быть.
>>2432570 Ну и нахувертил. Твоя хуйня ищет в любом месте, а не в начале. Это однострочник вообще. Есть str.startswith, там можно много вариантов проверить сразу. Ну или re.match('^[rR]').
>>2432334 >itertools Хрр-тьфу тебе в ебало. Итерационные приблуды можно использовать только если они код сокращают хотя бы втрое, понятно? Для однострочника даже не вздумай, используй старый добрый zip.
Кручу юниттест в докере, заебался каждый раз запускать руками и ждать пока докер стартанет. Есть какой-нибудь вариант автозапуска юниттеста для измененных файлов? Пока пойдет даже если просто любой файл меняется все тесты будут перезапускаться.
>>2428654 (OP) Изучаю питон год и вот понял, что программирование это не мое. Слишком я тупой для этого. Прощайте, больше не буду вам досаждать глупыми вопросами.
>>2431822 мужик хуярит код в блокноте впрочем, если пойти дальше, мужик не пишет на черве пидоре, настоящий мужик пишет на С кернигана-ритчи, ассемблере и фортране66
что ты такое несёшь, больной ублюдок?! они же дети
>>2433143 Наткнулся на видос, где проводится mock-собес с выпускницей скилл фактори или типа того https://youtu.be/nq3ki32aHWY?t=1127 Там чел ее просит написать функцию по развороту стринги, а слайсы она забыла и решила нагородить через for цикл. Самому стало интересно, как это можно было бы реализовать.
>>2433076 После скриптовых языков в это сложно поверить, но неявные приведения типов существуют далеко не везде. На фото - жаба, нелюбитель таких оладий приведений, там ифы строго с булеанами работают.
>>2432747 Не пойдет. Мне для ТДД нужно крутить сразу в терминале, при изменениях, а не коммитах. Идеально чтобы лишних действий не делать. Пример: jest в js
Сап, анончики Есть потребность написать бота, который бы принимал вебхуки с моего сервера и отправлял уведомления в discord. Хотел я значит заюзать flask для вебхуков и discord.py для самого бота. Но мне не удаётся скрестить это говно. Там или бот работает, или вебхуки Можете кто-нибудь ткнуть в статью/пример, как их скрестить или что использовать вместо них
Снова >>2431946 Вложенные циклы нужны вообще? Чет на курсе заставляют рисовать треугольники-квадратики. И хуйню вроде пика. В прошлых уроках хоть применение на примерах с матешой были, а тут чет совсем поебень. И что-то мне подсказывает, что все вот это делается быстрей и эффективней одной встроенной командой.
Анончики, подскажите. Вот дёргаяю я json с биржи. По id беру нужные данные нужной валюты. Но эти биржи, зачем-то постоянно меняют id у монет. Как правильно тогда дёргать данные по нужной монете?
Где цифра 10 - это ID монеты в json. Но оно может внезапно стать другим для нужной монеты. Сегодня это 10, а завтра 15 и т.д. Как тогда дёргать значение нужной монеты, чтобы постоянно не править значения нужных id?
>>2434064 Вроде есть. Но тогда получается, мне придётся несколько запросов делать, на каждую монету. Не слишком ли это расточительно? Сейчас всего 1 запросом получаю сразу все монеты с данными, оттуда беру нужные.
>>2434084 Нет. У каждой монеты своё ID. Но оно меняется иногда. Сегодня я дёргаю допустим по id = 1, а завтра нужно уже код править, т.к. id стал внезапно например 3.
есть переменная a есть переменные b и c В зависимости от разных условий b = None, с = какое-то значение, и наоборот
Как проще всего (по размеру написанного в основном) присваивать переменной a не-None значения этих переменных? Через if понятно что можно, но вдруг как-то еще?
двач как подружить django и react? как я делал: качал "react.js" и "react-dom.js" кидал их в static ну и просто подключал как и другие js. но все работало пока я в основном js файле не юзал import. как только мне потребовалось импортировать хуки django начинает ругаться что react.js нет. я пробывал указать что это модуль, но оно его всеравно не видит. хелп как это пофиксить?
>>2434086 Ты путаешь идентификатор и индекс в списке. Биржа тебе отдает неупорядоченные данные, и ты с чего-то решил, что этот порядок постоянный, что очевидно не так. Вытаскивай данные из этого списка в словарь, где ключом клади что-то действительно уникальное, в твоем случае trading_pairs, значение - весь объект с инфой. Дальше работаешь только с этим словарем, достаешь нужную инфу по нужному тебе уникальному ключу trading_pairs.
>>2434715 Двачую mypy + минимум динамики + грамотный DI когда зависимости не объявляются внутри кода приложения. Код гораздо чище и нет глупых ошибок когда мы обращаемся к None или непонятно что приходит строка или число.
Такой вопрос: Можно ли использовать т.н. list comprehension для создания переменной как-то иначе, кроме как на пикриле? Выглядит как говнокод, но я не нашёл других способов
>>2435410 Проблема решена. Надо было в настройках Ран Конфигурейшона выбрать стандартный интерпретатор Питона из ц/питон, вместо какого-то левого интерпретатора, который ПайЧарм сам создаёт
>>2435480 Тоже так думаю. Накодили виртуальных окружений каких-то. Нужно как диды. Один компьютер - один проект. Если нужно другую версию взять, то просто переустанавливаем ОС.
>>2435480 >>2435486 Здесь есть какая-то подъёбка, но я не вкуриваю в чём она На том этапе на котором я щас пишу код смысл в этих виртуальных средах мне максимально непонятен. Если мне от них будет какая-то польза — начну использовать. В данный момент благодаря виртуальной среде получилось только испытать баттхёрт. Как глобальный интерпретатор может засраться я тоже не ебу
Суть в чем: У тебя есть несколько проектов, один на джанге и питоне 3.8, другой нейронка какая-нибудь.
Чтобы не сваливать все пакеты и зависимости в кучу (в глобальное окружение твоего компа), можно для каждого создавать отдельное виртуальное окружение (папочку).
Т.е. у тебя для проекта 1 будет свой набор пакетов и своя версия питона, для проекта 2 другой набор пакетов. И они не будут друг другу мешать.
>>2435558 > есть какая-то проблема Пока нет. Это просто удобнее. Виртуальными окружениями несложно пользоваться. Написал в requirements.txt нужные пакеты и ты сможешь на любом компе собрать такое же окружение, что у тебя дома.
Есть еше докер, он вообще позволяет ОС "экспортировать".
Объясните популярно нахуя нужны сессии? Зачем нужен всратый геморр с их прописыванием, проверкой и печеньками? Сколько я ни пытался найти ответ, в ответку было лишь "сессии очень важны потому записываем их в бд и проверяем каждый раз при запросе пользователя", а на кой хуй оно мне сдалось ни сука слова нигде никогда не пишут. Я могу и без кук с сессиями это сделать, так нахуй оно мне тогда нужно?
>>2435600 Объясните популярно нахуя нужны переменные? Зачем нужен всратый геморр с их объявлением, прописыванием и проверкой? Сколько я ни пытался найти ответ, в ответку было лишь "переменные очень важны потому записываем их в память и проверяем каждый раз при запросе пользователя", а на кой хуй оно мне сдалось ни сука слова нигде никогда не пишут. Я могу и без памяти с переменными это сделать, так нахуй оно мне тогда нужно?
>>2435600 Объясните популярно нахуя нужны замки в дверях? Зачем нужен всратый геморр с их изготовлением, установкой и ключами? Сколько я ни пытался найти ответ, в ответку было лишь "запирать дом на замок очень важно потому запираем их и отпираем каждый раз при входе и выходе", а на кой хуй оно мне сдалось ни сука слова нигде никогда не пишут. Я могу и без ключей с замками это сделать, так нахуй оно мне тогда нужно?
простите, не мог пройти мимо пастопотенциала этой тупости
>>2435600 Да что тут спрашивать, тут одни тролли с опухшим эго отвечают. Лучше спроси у любой домохозяйки или бухгалтерши, сидящих в векашечке, что происходит после очистки кукисов, они объяснят доступно.
Разрабатываю админскую утилитку, такую чтобы ее можно было качать одним файлом. Но хочу все равно иметь для разработки модули и тд.
Где в github посмотреть шаблоны таких проектов? Нет, идея сделать изолированный пакет и заставлять пользователей устанавливать из pip мне как-то не нравится, хотя как запасной вариант сойдет.
>>2435558 Виртуальными окружениями проще пользоваться, чем тебе сейчас кажется.
В вводных доках обычно предлагают делать активацию среды, какие-то мутные лишние действия, это когда ты через консоль работаешь, но проще просто пользоваться полным путём до интерпретатора, вроде ~/virtualenvs/python3.10/bin/python moya_proga.py
Придумали окружения в первую очередь для легкой портируемости. Чтобы удобно контролировать зависимости разных проектов, удобно было воспроизводить окружение на других компьютерах и т.п. Это довольно ценный плюс.
Плюс это позволяет работать с разными версиями питона одновременно.
Мне надо извлечь каждый 30й кадр из видео. Я посчитал по длительности на калькуляторе выходит +- 30000 кадров. Однако, сам скрипт выходит за эти рамки, я где-то на 45000 остановил. ЧЯДНТ?
>>2435775 Ты каждый раз заново инициализируешь итератор, потому что вызываешь card() попробуй сделать x = cards() и дальше print(next(x)) print(next(x)) print(next(x))
>>2435814 Гугли ffmpeg, когда в сбере на Visper работал, там все им было обмазано, как с видео так и с аудио работает. Вызывается простым os.subprocess
Есть разные способы для взаимодействия между процессами. Зависит от того, как ты запускаешь процесс, какая операционная система.
Unix сокеты только под юникс-системами. Это для случаев, когда тебе надо коммуницировать с сервисным процессом каким-то, который запущен постоянно, или он запускается из другого процесса. Точно так же ты можешь через TCP соединение коммуницировать, это работает и под виндой.
Ещё есть разные mmap, shared memory, ещё есть pipe и mp.Queue, но это когда ты запускаешь процесс из своего процесса (кроме mmap).
>>2435858 ffmpeg по-моему покадрово не очень работает, плюс он будет сохранять в файлы картинки, а не в виде общекта в память. Потому что внешнее приложение.
Хочу вкатиться в питон, начать с бесплатных курсов кого посоветуете посмотреть дабы не наткнуться на инфоцыгана который знает и умеет тоже самое как и я то есть нихуя? Много видео разоблачений платных/бесплатных курсов пилят друг на друга, не хочу зря тратить время и в итоге ничему не научиться Пожалуйста без тролинга я новичок и я тупой
>>2435973 https://hyperskill.org Python for beginners + python core Дальше придумывай себе петы, решай реальные задачи типа парсингов скрапингов хуяпингов итд Я со знакомым челом вкатываюсь по этой хуйне, а он по степику У меня прогресса в ххх раз больше А всякие курсы с видосами это вообще кал имхо нереальный. Видос может помочь только специфик топик разжевать если понадобится. Nfa dyor
>>2435376 Не нужно список создавать. Используй генераторы. var = next((string.upper() for string in listt if 'e' in string), None) >>2435380 Навернётся, если слов с 'е' нет или больше одного.
Допустим: class test: ----def __init__(self, x, y): --------self.x = x --------self.y = y ----def get_sum(): --------return x +y
object = test(10, 20) print(object.get_sum())
self = это ссылка на созданный объект. Если мы пишем просто x = x и y = y, то эти переменные существуют только внутри функции __init__ и удаляются, когда эта функция заканчивает работу? Чтобы привязать переменные железно к объкту, мы юзаем self, чтобы в памяти были переменные <адрес объекта>.x и <адрес_объекта>.y
То есть, если мы где-то объявим в классе x = 5 y = 50, то это будут уже переменные, привязанные к классу, а не к объекту?
Вроде я все понял, но все равно нету ясности. Если несложно, анончики, можете объяснить еще раз, для хлебушков?
>>2436717 Ну например объект картинка. Тогда х и y это к примеру координаты её расположения на экране. То есть не просто числа, а некие свойства объекта.
>>2436717 Да, селф это ссылка на конкретный объект. Когда ты вызываешь его методы, то он подставляется первым аргументом. Это называется биндинг. Вот тебе поясняющий пример. https://ideone.com/9mCJof Вызываем функцию класса с передачей объекта первым параметром. Стандартным способом это работает так же, но неявно.
>>2436720 То есть везде нужно писать picture.x, чтобы вывести эти координаты? Питон это интерпретирует как obj.<addr_obj>.x? Если мы в классе картинки объявим x = 10 и self.x = 15, то picture.x выведет именно 15? А чтобы вывести 10, нужно уже будет к аттрибуту класса обращаться? Т.е. picture_class().x выведет 10?
>>2436729 В целом да. Класс это набор функций, объект это структура данных, привязанная к этому набору функций. (можешь думать, что словарь для простоты, зачастую так и есть).
Сап, питоньеры В общем есть задача затестить апишку. Эндпойнт добавляет картинку к посту. Картинка добавляется в формате base64. В переменной контент уже хранится строка в этом формате и собственно передается в запрос. Руками тестил - с этой строкой нихуя не работает. Если просто пидорить туда че то, не base64 строку, то все норм, код 200. Если же добавляю base64, то вылетает ошибка, хотя в доках к апи, сказано, что формат должен быть base64. Че я могу делать не так?
>>2436729 В соседнем треде как раз скрин с движка на питоне был. Сокращения очень важны для читаемости кода, иначе всё заполонят дичайшие многоэтажные конструкции.
>>2436729 Часть полей класса иногда делают приватными и ты их значения никак почти, кроме изнутри объекта через селф не получишь, и эта фича инкапсуляция очень помогает не обсираться, особенно в больших проектах.
>>2433136 >>2433149 Вкалтун. Дошел наконец до строк и методов. Кмк она пыталась через фор перевернуть строку как обычный инт фор _ ин рейнж(х) хуй = x // 10 x % 10 принт(хуй) или чета такое.
А надо было хуй = Хуйня (хуй[::-1].капиталайз())
Это чему их такому на курсе учат, что они не могут базу? Ролик дальше условий не смотрел.
>>2433136 >>2433149 А может нахуй надо вообще в погромирование идти, если кроме слайсов в голове нихуя нет. Одно дело, когда понимаешь, что слайсами правильнее, другое - когда не знаешь как сделать иначе.
>>2437872 Нет. "Только нахуя, лол" было в контексте зачем.
Дано: из Кошка сделать Акшок. Считай что вместо кошки произвольная строка с произвольным количеством символов. Иначе можно ручками переписать и будет норм. НО! Мы не помним, не только срезы, но и отрицательную индексацию.
Задача: Вычислить индекс последнего символа произвольной строки, и начать принт с него, и чтоб первый, и только первый, символ новой строки был заглавным.
Просто перевернуть строку даже такой вкалтун как я может. И даже поучаствовать в соревновании на самую уёбищную конструкцию. Мои заявки - вложенный цикл и счетчик.
>>2435345 А тебе нормально рытся в любой функции что бы понять что именно она возвращает? Ладно когда небольшой пет делаешь в одиночку, но когда кодовая база становится такой, что к некоторым модулям могут по несколько месяцев не притрагиваться + кто-то другой может смотреть твой код это прям в микроадок превращается.
>>2437883 Зачем делать бессмысленные задачи которые никогда не пригодятся? Лучше оттачивать реальные задачи по примерам профи, иначе окажешься в ситуации, когда кроме велосипедов на бесполезные такски ничего не можешь.
>>2428654 (OP) Попал в просак когда решил сделать базовый класс (это aiohttp) от которого будут наследоваться все другие и просто передавать ему в параметры класса service_entrypoint - асинхронная функция без аргументов которая потом будет вызываться.
При вызове: asyncio.create_task(self.service_entrypoint())
он мне выкидывает: takes 0 positional arguments but 1 was given
То есть эта падла передает ему self, т.к. считает это не какой-то левой функцией а полноценным методом класса. Как фикситься? Из того что вижу пока - надо мутить с метаклассами
нет, в __init__ передавать функцию не могу, т.к. это класс-вьюха и она не предназначена для прямой инициализации
>>2438115 Она удобнее ровно до того момента как ты перестаешь помнить что ты написал какое-то время назад, после этого ты не можешь просто взять и заюзать какой-то модуль проверив нужные сигнатуры у возвращаемого объекта в IDE и разработка замедляется. Ты не представляешь какой ад вычитывать динамикодрисню другого разработчика, когда тебе нужно дернуть буквально один метод из его кода.
Как самый верхний декоратор может получить доступ к списку всех значений переменных a, x, y, z и т.д., которые были переданы вот в эту стопку параметрических декораторов, лежащих под ним? Или же - как перебрасывать вверх значения переменных между параметрическими декораторами, точнее, по сути между одним декоратором с многократным вызовом?
Пишу бота, надо чтобы он каждую секунду выполнял функцию creation(). Она не принимает аргументы.
Если делаю if __name__ == '__main__': schedule.every(1).seconds.do(creation()) То файл создается, но скрипт сразу крашится с ошибкой the first argument must be callable
Нагуглил решения только с функциями принимающие какие-то аргументы. Как это исправить можно?
>>2438167 Что ты там запомнить и узнать всё не можешь? Меньше говнокода писать не пробовал? Ты понимаешь что любая сложная архитектура на питоне в разы проще создаётся, поэтому его используют везде. Иначе бы как деды ебались с указателями и ручной адресацией памяти.
>>2438333 Ребенок, переставай хлебать борщи и пиздуй искать работу. Вот как поработаешь на реально проекте - приходи назад, плакаться, насколько ты был не прав.
>>2438393 Мы тебя тут в 2 смычка ебем, шизло. Очнись, статическая типизация - маст хев на любом крупном проекте в беке. Случайно спизданешь обратное среди Уважаемых Людей - быстро отправишься в петушиный угол картриджи заправлять и никто тебя к коду больше не допустит.
>>2438393 >Нужна статика пиздуй в другие яп. >>2438404 >статическая типизация вы язык не попутали? где питон с его type hinting, которые суть подсказки, а где статическая типизация.
>>2438464 именно поэтому в питон и ввели type hinting и постоянно его расширяют с каждой версией чтобы показать, насколько не нужно типоуказание и что динамика рулит
>>2438500 именно так. а если видите, что какая то либа отказавшись от поддержки пи2 вдруг начала вовсю тайпхинтить, так это разрабов комары покусали (комары переносят желание указывать типы)
>>2438600 Наличие функционала лучше его отсутствия. Однако сам я ни разу тайпхинтом не пользовался, поэтому мне трудно понять почему тут истерят от динамики.
>>2438610 боятся что на их любимый язык покушаются и заставляют писать в каком то особом стиле, что противоречит каком то там духу
вот только это тупо подсказки для IDE, чтобы работал автокомплит Язык никак не навязывает их писать (ибо это не статическая типизация, да вообще никакая не типизация - это подсказки). А значит внедрение онных в либе питона и в других любых либах - просто показатель полезности подсказок
>>2438626 Да тут статикошиз вернулся, давно его не было, а теперь в нескольких тредах опять про свою статику.
Интерфейсам и библиотекам нужны тайпхинты. Реально удобно. Это работает как документирование кода дополнительное.
Динамика как была, так и остаётся.
Ты можешь сделать def foo(x: Union[int, str, Callable[[int], int]] то есть одна переменная может быть нескольких совершенно разных типов, и это норм. А в статике невозможно. Конечно шиза в таком виде, просто для примера
Но более практически примеры тоже бывают.
Всё-таки хорошо тогда, когда ты можешь прописывать ограничения там, где надо, и как тебе надо, а не когда ты вынужден делать всегда и везде и только в одном виде.
>>2438705 >такое перебор в рабочем коде. Когда жсоны перекладываешь, то самая обычная история. Одно свойство жсона в одном случае может быть одного типа, в другом совсем другого, в зависимости от значения какого-то параметра. Или вообще просто так. И это нормально даже.
На таких задачах начинаются проблемы у статико-языков, а динамо языки отрабатывают хорошо. При этом параметризации всё поддаётся, пидантики всякие есть много чего ещё.
>>2438860 >>2438866 И гуглить-то пробовал? Задача типовая, соответственно мануалов по типу "how to deploy telegram bot on heroku" наверняка до жопы есть всяких разных
>>2438880 Ну на хероке чуть другой подход на самом деле - там предполагается иметь в корне гит репы Procfile в котором записаны все комманды, которые нужно выполнить при запуске машины. Тогда ты в этом файде пишешь что-то типа "python main.py" и тогда не нужно подключаться
>>2438882 >тогда не нужно подключаться Не понял. Я этот прокфайл создавал, но способ был максимально ебанутый, предполагающий установку heroku cli. Можно было просто в проект сунуть и работало бы?
Аноны а можете накидать за щеку роадмап для дата сосаенса? Пока что заканчиваю читать вводную книгу по питону, знакомлюсь с синтаксисом. Имею базовые знания математики, логики, информатики на уровне первого года вуза CS направления да и было это давно и неправда, так что для вкатуна желательно.
>>2439002 Бля я вообще с сосаенсом никогда не соприкасался. На хх нашел стажку в компанию говна разрабатывать анал компутер вижн. Нашел 15минутную видяшку типа как сделать нейросеть которая отличает кошек от говна. Посмотрел, скопипастил, чуть изменил под себя, попутно гугля интересные для себя вещи в коде. Сходил на собес, где тимлид пахан рассказывал что они мастерят. Как я понял всех все устроило и меня уже берут а я к ним не пойду, она не оплачиваемая, а опыт в рогах и копытах ну такое Дело было неделю назад.
>>2438668 >одна переменная может быть нескольких совершенно разных типов, и это норм. А в статике невозможно Бля, охуительные истории, ща Object instanceofить буду. Саму идею интерфейсов, которая из статики пришла - тоже нахуй, переменная строго одного типа теперь может быть. Сращу видно эксперта, который увидел код laba2.cpp, где компилятор запрещает переписывать переменную другим типом, и сразу познал дзен.
>>2439061 Вранье гринтексте не видишь даже после того, как кто-то на него указал, зато априори "все верно" там. Хорошо тобой быть - все вокруг, с кем ты согласен, никогда не врут.
Для самых маленьких: я не участвую в том споре про правильную типизацию - это сугубо вкусовщина, ешьте любую каккя нравится, а лишь указываю на ущербность аргумента, фактически не соответствующего действительности.
>>2439077 ну ты ОЧЕНЬ непонятно написал где там не соответствует действительности. Абсолютно непонятно написал. Перепиши текст в понятные аргументы и я разобью его в пух и прах но поскольку ты не участвуешь. значит аргументов вменяемых нет (или тебе лень) ну значит мимо проходим.
>Саму идею интерфейсов, которая из статики пришла - тоже нахуй, переменная строго одного типа теперь может быть ну а это вообще из разряда "сам придумал - сам обосрал"
>>2439080 Ты глупенький? >А в статике невозможно Object a; a = 5; a = "string"; a = new Nebo(); a = Allah.getInstance(); Вот тебе переменная, которая может быть совершенно разных типов в статике. Ровно так же как и в динамике, если надо дальше с ней работать, а тип не известен точно, ты будешь городить isinstance/instanceof, чтобы ублажить в первом случае иде, во втором - компилятор.
>>2439080 >ты не участвуешь. значит аргументов вменяемых нет >я не участвую в споре, а лишь указываю на кривой аргумент Алсо, подтяни навыки чтения, пригодится в жизни. А пока давай на аналогиях: два чела спорят про то, какой самовар купить - дровяной или электрический. Один из них заявляет, что надо непременно электрический, потому что в дровяном нельзя сварить пельменiв. На что любой мимоадекват скажет, что это чушь собачья, но тут приходишь ты и отвечаешь, что тебе тоже нравятся электрические, поэтому они неправы и вообще из дровосекты.
>>2439082 >Ты глупенький? лол. ты указал базовый тип и такой "смотрите можно" давай посмотрим на "что можно"
>если надо дальше с ней работать попробуй сделать а+а и если ты сделаешь isinstance, то это тебе не поможет. тебе сначала нужно сделать cast в другую переменную потому что финт ушами вида
object a = (int)5; a = (int)a; a+a;
попросту не работает
компилятор благодаря статической типизации (не путать со строгой) не дает тебе работать с этой переменной иначе как с объявленным первоначальным типом. И плевать что ты туда кладешь - компилятор волнует именно объявленный тип, который ты не можешь сменить и поэтому вынужден подключать другие переменные. В динамических языках ни других переменных, ни каста не нужно.
То есть внутри может лежать быть содержимое любого типа. но тип самой переменной не изменить. гринтекст прав.
>>2439087 все проще. ты очень невнятно выражаешь мысли. пока не попросят перефразировать
>>одна переменная может быть нескольких совершенно разных типов, и это норм. А в статике невозможно повторю гринтекст. тип переменной не сменить. содержимое да. но сам тип нет.
>>2439088 >>2439091 >ты указал базовый тип и такой "смотрите можно" Ну да, извините, там синтаксисом надо какой-то тип да указать. Или что, в динамике это как-то по другому работает? Тот же object уже не базовый тип для всего? Не надо делать проверки типа в этой ситуации?
>гринтекст прав. А теперь читаем тот самый гринтекст >Ты можешь сделать >def foo(x: Union[int, str, Callable[[int], int]] >то есть одна переменная может быть нескольких совершенно разных типов, и это норм. А в статике невозможно. Аналог в статике сам сообразишь какой.
>То есть внутри может лежать быть содержимое любого типа. но тип самой переменной не изменить Тут ты прав. Ок, значит гринтекст просто криво пример привел, который не отражает сути того, чего сказать хотел.
>>2439095 >Или что, в динамике это как-то по другому работает? да. не нужно. может ты и не можешь сделать x+x (вернее ты можешь так то) но ты изи можешь доложить эту переменную в список интов
>Аналог в статике сам сообразишь какой. никакой. x: object не является аналогом ибо на вход придет именно обжект, а не число, строка или calable и поскольку это совершенно левый тип от ожидаемых 3х, то я не могу его положить в список интов мне не нужен обжект, а я вынужден!!! делать каст. В питоне же instanceof нужен лишь иногда.
>>2439097 >положить в список интов Если ты положишь в список интов юнион из аргумента, то у тебя уже не список интов будет, а список юнионов, правда? Тайпхинт это, конечно, не перепишет, но тем хуже - он теперь тебя будет дезинформировать. Чтобы гарантировать, что ты только инты кладешь, тебе как ни крути придется делать проверку типа.
>>2439099 >то у тебя уже не список интов будет, а список юнионов, правда? >Чтобы гарантировать, что ты только инты кладешь
И вот еще одного понесло в дебри. Какие еще гарантии? какая проверка типа?. Это язык с динамической типизацией. Можешь класть что угодно и не проверять типы. Пишите код, как писали. Что вы фантазируете то блин твой метод может проверять is None и передавать дальше. потому что ему плевать на тип и всем плевать
То какая то статическая типизация, то интерфейсы уже какие то. то гарантия Прямо посягают на бедную несчастную динамику питона злые любители компилируемых языков (питон кстати тоже компилируется, но то такое)
абстрактные классы были и в пи2. тайпхинтинг был на уровне докстринга (пусть даже не пепно это - я честно хз)
питон 3 со своими тайпхинтами всего сделал хинты стандартом и усилил их. Ради улучшения ситуации с автокомплитом IDE, статической проверки и рабочими авторефакторингами ну и ошибками вида "хз че там" (ковыряние в чужом коде ради "да бля что там в итоге а и что у него есть" - радость то какая)
И ни в какие "писать как в языках со статической типизацией" никто не залезал. Разница в том, что тайпхинты это описание контракта, а не описание сигнатуры (ака интерфейс) которую потом нужно реализовать И плевать на типы в рантайме.
Тут можно сказать "а как же пидантики всякие"? А никак -пидантик это лисапед на тему "а почему бы и нет". Было обновление питона, которое ломало фастапи с пидантикоми (а заодно мою петовую либу орм) ответ разрабов питона был прост - типы не для рантайма, если вы полагаетесь на них в рантайме, то ссзб
А раз это всего лишь подсказки по контрактам то
1 можно указаь несколько типов для параметра. и сделать @overload для удобства выведения типа 2 Есть понятие Protocol, где описываешь контракт и класс подпадающий под контракт про него знать не знает 3 И даже не просто класс. Можно и модули описать. Вот у меня плагины тупо файлик подкинул и заработало - описаны через протокол. IDE довольна 4 TypedDict проходим мимо. очевидно что словари от него не наследуются. потому что это описание контракта 5 помимо Union для типов есть еще NewType, который использовать как описано в доке хз зачем, но как подсказка для НЕсуществующего типа вполне можно
Также можно даже сделать родителем класс чтобы он считал дочерним класс, который от него даже не наследуется. Сила питона. Так то хинтинт тут не причем - просто вспомнилось
В общем основная сила хинтов - подсказки для IDE, анализторов и так далее. Но поскольку это подсказки, то они никак не требуют что то там наследовать, рализовывать или даже прописывать эти подсказки
>>2439100 >Какие еще гарантии? какая проверка типа? Можешь класть что угодно и не проверять типы Ну да, но это только если в твоей ситуации норм неоднородный список. Как-то на практике их встречается на порядок меньше, чем однородных. Оно и понятно, поймать через х часов работы рантайма на другом конце проекта в каком-нибудь цикле по этому списку TypeError int object has no method strip или как оно там крашится, как-то не очень интересно, и иди ищи кто туда чего клал. Отсюда и желание иметь инструментарий для отлова таких говен. Опциональный, надо заметить, кому-то и так норм.
>>2439101 >ответ разрабов питона был прост - типы не для рантайма, если вы полагаетесь на них в рантайме, то ссзб Ага, а потом они сделали functools.singledispatch.
>>2439114 так об этом и речь. никто динамику не трогает. просто добавили опциональную возможность сильно облегчить себе жизнь хинтами. И именно хинтами, а не статической типизации, которой тут не лежало.
>>2439120 ну им то можно. это ж встроенный модуль. идет с дистрибутивом, а значит у него нет задачи "нам нужно поддерживать и старые питоны".
>>2438979 Heroku CLI тебе действительно понадобится чтобы пушить локальные измения кода в репу с которой хероку запускается, чтобы запускать, останавливать сам сервер и ещё для чего-нибудь такого. Для администрирования в общих чертах короче.
Чтобы после каждого запуска/перезапуска сервера вручную не лазить в него и не запускать бот вручную, можно нужно в прокфайле прописать нужные комманды. Если всё что тебе нужно это стартовать бота то прокфайл будет выглядеть плюс/минус как пикрил (https://towardsdatascience.com/how-to-deploy-a-telegram-bot-using-heroku-for-free-9436f89575d2). Прокфайл должен лежать в корне гит репы. Ещё там же можно создать runtime.txt где можно конкретную версию питона указать. Переменные окружения не забываем настраивать.
Если кроме бота нужно ещё нужно запустпть базу данных/селери/кролика то это отдельная ёбля. Если нужно что-то на диск сохранять то хероке такое не нравится и нужно использовать облачные сервисы хостинга файлов типа AWS S3.
Мяу. Есть графики и схемы в matplotlib, на них поверх рисуются дополнительные стрелочки вручную. Как правильно перерисовать их при изменении масштаба, чтобы обновление картинки не лагало настолько безбожно? Фоновый график такой же, там просто с учётом xlim/ylim поверх рисуется ещё несколько стрелочек и надписей.
Через canvas.mpl_connect('draw_event'...) всё очень медленно работает, и перерисовывается не всегда... Может быть есть какой-то режим работы matplotlib, который лучше подходит для не оффлайн отрисовки, чтобы и на нажатия мышкой можно было прикрутить реакцию?
Хочу вкатиться в кодинг, решил начать знакомство с этого вашего питона, так как, грят, он один из самых легких для вката, и при этом на его примере можно в общих чертах понять, как устроено программирование в целом (да?). Кстати, в математике не шарю, и в других точных науках тоже. Посоветуйте мне, дурачку, какие-нибудь учебники, гайды, где прям с нуля все разбирают по полочкам. Желательно написанное живым, неакадемическим языком. А язык текста, к слову, можно и английский. Пока что с целями особо не определился, но, наверное, в отдаленной перспективе хотелось бы уметь делать небольшие игры. Сейчас просто хочется разобраться что к чему. Заранее спасибо.
Мужики, тут такое дело. Решил попробовать собрать экзешник. Написал простую консольную говноигру. Собрал через pyinstaller, запустил экзешник - защитник шиндовс тут же выдает: Behavior:Win32/DefenseEvasion.A!ml и кидает мою говноигру в карантин. Это в pyinstaller вирус был чтоли? Устанавливал через консольку командой pip install pyinstaller
Где можно посмотреть хорошую организацию кода. Я заебался уже рефакторить. Каждый раз по новому, каждый раз заебца, но потом скатывается в говно. Например, взять aiohttp. Есть core.py, в котором описаны методы получения сессии, с параметрами урл, хедера, коннекторов и пр. Есть request который проверяет ответы, ошибки и делает пару повторных запросов при разрыве соединения, паузы при превышении лимита и прочих http факапах. Рядом с ним есть уже модули к конкретным апи, в каждом лежит request.py и models.py. В первом лежат методы для различных запросов, во втором лежат пидантик модели для чтения ответов. Классов нигде нет. Так нормально? Или лучше без пидантик моделей?
>>2440124 >Где можно посмотреть хорошую организацию кода >Например, взять aiohttp. Давно не заглядывал в код туда... Светлов няша и всё такое, но код в его творениях иногда такой, что даже мне за свой уже не так стыдно становится
>>2440133 Ну, у меня asyncio, сама либа устраивает. Да в питоне все async либы это костыли разной степени паршивости, но раз так то уж хотя бы в коде хотелось бы порядок иметь! Спросить не у кого, знакомых питонистов, а уж тем более коллег нет совсем. Сам себе ревьюер, тестер и всё остальное, 4 небольших проекта на проде висят по 2.5-3к строк, хочу красоту навести.
Привет, аноны, мне нужно написать простого бота для телеги на пайтоне, кто сможет помочь его написать за деньги, оставьте, пожалуйста, телегу, я напишу и договоримся
from time import perf_counter, sleep from random import random
print("Press Enter to play") input() print("Ok, get ready!") sleep(random() 5 + 1) print("Go!") start = perf_counter() input() end = perf_counter() print(f"You reacted in {(end - start) 1000:.0f} milliseconds!\nGoodbye!")
В 2-2,5 раза больше, чем на сайтах проверки (например https://humanbenchmark.com/tests/reactiontime). Скрипт показывает неадекватные цифры, мне интересно почему он врёт и как это исправить?
>>2441044 >>2441046 Хм, у меня скрипт показывает примерно 500, сайт 200.
Это я проверял в pyCharm. Запустил скрипт в повершелле - там примерно 250 мс. Запустил в wsl2 убунту - на 10% быстрее чем в PowerShell, но всё же не так как на сайте.
Мне интересно, а как можно реальные цифры организовать на питоне, а не вот это?
>>2441070 Ну это очень разные способы. Там терминал и клавиатура, там мышка и жабаскрипт в браузере. Может у тебя какая-то игроёбская мышка с разгоном опроса юсб, что тоже даст отличие.
>>2441070 Сделай в виде графики, как на сайте, это будет работать уже адекватно.
Проблемы две. Первая человеческая, скорость реакции на печать текста может быть хуже, чем реакция на смену фона-цвета-яркости.
Вторая техническая. Между тем, как ты вызываешь функцию print(), и тем как на экран что-то выводится, может пройти определённое время, не самое маленькое. Скорее всего это в pycharm и происходит.
>>2441071 Я так понимаю, что это должно быть равносильно такому?: print("Press Enter to play", flush=True) Если да, то цифры не изменились.
>>2441082 Даже с игроёбской мышью не могу представить такой разницы
>>2441089 Хм, вот это вероятно и есть причина. 30-50 мс за счёт текстового аутпута, а не цветового. Выглядит говном ситуация, нафига тогда точность в наносекундах у модуля time, если в зависимости от среды выполнения нельзя даже адекватно разницу посчитать между perf_counter()?
Пойду читать про буфер в print(). А ведь начиналось всё с Regex, после перекинулся на субпроцессы, ща из-за примера на это. Хочется всё узнать, хз как учить что-то конкретное, когда как в вики по ссылкам скачешь читаешь.
>>2441111 >Выглядит говном ситуация, нафига тогда точность в наносекундах у модуля time, если в зависимости от среды выполнения нельзя даже адекватно разницу посчитать между perf_counter()? perf_counter() и monotonic() для других целей
Они корректно изменяют. Просто ввод-вывод в консоль не в реальном времени происходит, это же тоже не главная задача, реальное время обеспечивать?
Адекватность браузерных замеров тоже под вопросом. Потоу что и браузер не предназначен для вывода чего-то в реальном времени, там тоже есть время реакции на события, чистка мусора и т.п.
>>2441070 >Мне интересно, а как можно реальные цифры организовать на питоне, а не вот это? Консолька на реалтайм не рассчитана, там буферизации, задержки, брр - полный рандом в зависимости от платформы. По хорошему raw input, но (на виндоус) это будет проще на си написать, чем на питоне найти либу с winapi и там все те же строчки написать но с замороченным синтаксисом. Стандартные события виндоус, которые скорее всего во всех pygame и аналогах используются добавляют задержку. Возможно короткая виндоус-реализация будет, если есть либа для directinput под питон. И ещё картинку-текст лучше аппаратно тоже выводить...
>>2441303 Pygame это sdl, а она на С. Да и очевидно для игр даже 200мс ужас как много для таких простых функций. Там в 100 раз большие объёмы надо за 1 кадр высчитывать.
>>2441303 >>2441310 Консоль это консоль, там свои буферы, там вероятно специально сделано так, что данные чуть накапливаются, а потом скопом выгружаются.
Графические оболочки работают адекватно. Я сам такую штуку просто по фану делал на wx. Можно скорее всего кучу вариантов найти на всех оболочках.
Погрешность измерения в большинстве случаев будет на уровне продолжительности одного кадра, 1/60 секунды условно.
>>2441313 Всё ещё нужно отключать двойную буферизацию - и вообще я имел ввиду, что не нужно через условный tkinter что-то перерисовывать, лучше что-то вроде pygame.
Холлош. Делаю либу для того чтобы аудикокниги через silero генерить, вот пришёл к тому что очень требуется либка которая помогала бы форматировать текст. Убирать лишние пробелы, и вайтспейсы (табуляции, лишние переводы строки и т.д.)
Если доставать на сухую контент из epub он выглядит как срака полная. Есть что на примере?
>>2442332 Достаточно часто, пандасы это большущие комбайны, которые нужны для специфических случаев и нужно тащить их в зависимости если точно не уверен.
>>2442332 Очень часто использую itertools.count Замена трёх строчек кода, но тут вопрос стиля больше
Другие какие-то штуки оттуда как-то разово использовал, но по факту редко.
Из collections ChainMap довольно практичная и полезная штука, остальным по-моему не пользовался на практике.
Сравнивать с numpy и подобными неправильно. Не помню такого функционала там, во-первых, во вторых хорошая практика в том, чтобы пользоваться функционалом из стандартных библиотек, чтобы не привязываться к зависимостям.
Конечно, это если твой код не полностью построен на какой-то библиотеке.
functools ещё есть, есть рекомендации использовать partial оттуда, но лично я это чаще игнорю и делаю люмбды или же стои локальные функции.
>>2442332 Очень часто датаклассы использую, второй по популярности - functools.wraps, иногда использую всякие вещи из functools и collections, itertools почти не пользуюсь.
Здравствуйте все. Порой у питона находятся очень хорошие утилиты, которые я удачно пизжу, но так как в питоне я хуй простой, то перевожу их в standalone exe всякими свистелками-перделками из сети. Теперь вот понадобилось то же самое сделать с этой вот штукой https://pypi.org/project/mcrcon/ (не для майнкрафта, rcon используется дохуя где), оно переводится, но ничего в консоль не выводит. Если паке установить то mcrcon или mcrcon --help выдаёт хоть что-то. Если же превратить пакет в exe, то в консоли пусто. Помогите перевести или перевидите, пожалуйста, этот пакет в exe (x86 по возможности)
>>2442332 itertools достаточно часто. collections не использую совсем, сейчас посмотрел - вроде бы и нет особо полезных штук, а если и есть, будет несложно написать что-то своё поверх стандартных типов. А если код про скорость, то это не про питон, и либо через извращения с numpy делать, или с numba, либо, да я не знаю..
Почему numpy до сих пор не стандартная библиотека - не очень понятно, он же чаще того же itertools используется.
>>2442609 >не очень понятно, он же чаще того же itertools используется. у кого чаще? пока не понадобилось всякие там научные штуки - и не использовал даже.
Тыкаю в http://restful-booker.herokuapp.com/ Постманом, если важно, но на этапе создания токена, по дефолтному логин-паролю отфуболивает пиком. И пример для тела пробовал, и в парамс, результат один. Это в демке дело, или у меня руки из жопы?
>>2442622 У меня. А что, питон для чего-то ещё используют? Ну, я математик, питон - вспомогательный язык, у меня три без половины программы без numpy, если не считать небольший файлов-скриптов, которые вместо батников.
>>2428654 (OP) Кто-то может представить больших куколдизм чем разработка с flake и ему подобными "слишком умными" линтерами?
Found too many `elif` branches High Jones complexity Found negated condition Found upper-case constant in a class
Какая-то скриптовая чмонька, указывает тебе как писать код? Пиздец, все равно что бабу ебать, когда над тобой мамка стоит и говорит что и как делать. Тут уж лучше и правда другого ебаря пригласить чтоб все за тебя сделал.
>>2442332 Зависит от того где, как и кем запускается скрипт. Наколеночный glue скрипт я могу и без внешних библиотек написать, ибо чинить по патчноутам ваши йоба-комбайны при обновлении питона сил никаких нет.
>>2442674 >too many `elif` branches Ебать, давай-ка расскажи мне сколько в моем коде должно быть ветвей)) Что сам-то бдешь делат ькогда поймешь что кондишенов уже больше 3?
>High Jones complexity Вообще пук в лужу
>negated condition Безусловно, раз скриптик спизданул что "нидолжно" то так и делаем, похуй что в таком случае когнитивная нагрузка меньше
>upper-case constant in a class Ору вместе с моими enum-ами
Там еще есть такой ништяк как "used 'in' not with set container" - скриптопетух не в курсе как set/dict работают
>>2442670 Да забей, через некоторое время код будет сохраняться в промежуточном представлении, и каждый разработчик будет видеть код со своими отступами и настройками стиля, и возможно даже с другими именами переменных.
Сап. Не могу понять почему превышен лимит времени. До этого думал, что создал вечный вайл, пару раз его переработал, не помогает. Наверное дело в том, что использую поиск в ширину вместо в глубину. Но в графе все вершины, кроме одной обходятся единожды и оба поиска по сути идентичны. Или в глубину обработает все быстрее? Или проблема в чем-то другом? пик 1 - задача пик 2 - попытки https://pastebin.com/M98ZqAPg - код
>>2442679 Адепты Чистого Кода это опущенные, с ними даже общаться не нужно. В их "Библии" указано даже число строк сколько максимум может быть тело функции. Как, думаете сколько это? Воздуха в грудь набрали? 8, ага
>>2442722 Ну, ставить пробелы вокруг операторов - не такая плохая идея (я ставлю вокруг ==, = и подобных, и не ставлю вокруг +, *), но вот с количеством строк - я тут показывал код, где функция на 113 строк длинная - но она выполняет одну логическую функцию, и кому я показывал сказали что всё понятно в коде сразу.
>>2442697 А дашь ссылку на задачку, хочу сам потыкать. Так без цифр вообще не хочется пробовать написать или изучать твой код...
>>2442806 Папка пишет код читаемым несмотря на линтеры. Линтеры лишь ограничивают Папку. В тему идут только линтеры форматирования вроде black или mypy для типов, если ты сумел его нормально прикрутить, а не через жопу (как чаще бывает). flake - нахуй
>>2442844 Чет этот папка вместо того, чтобы быть гигачадом и отказаться работать в тиме с неудобным ему линтером / продавить свои правила для линтера, тихо ест что дают в тиме и изливает свое нытье на двачах.
>>2442050 Спасибо! Это всё же немного не то. В моем случае там именно сирена с определенными частотными характеристиками, которые в остальном потоке не встречаются. Штош, попробую поработать с исходниками на С, а там глядишь кто-то ещё что-то посоветует.
Пацаны, как убрать из стринга вот подобную текстовую формацию смайлов? Детектить и удалять весь текст посреди двух двоеточий не вариант, так как бывают случаи, когда они используются по делу. Но ничего другого в голову не приходит. Так что к детекту по колонам добавлю еще 2 критерия: латиница и кол-во символов <20. Но уверен есть вариант лучше.
>>2443341 Мда. Этот теперь в две жопы срет сразу и в питон-тред и в жс-тред. Мань, что ты ерзаешь туда-сюда? Нахера ты учишь, будучи вкатышем, язык для фронта И язык для бэка? Ты определись уже.
А то так и будешь сидеть лаба1.руjs в треды постить.
>>2443429 тут мало настолько токсичных персонажей, как шнобель. и он любит, обосравшись, нападать с оскорблениями типа такого >>2443409 "это не я обосрался, это ты додик-даун"
Сап, возникла задача - есть список координат (штук 10 к примеру) и нужно между точками составить автомобильный маршрут ну и нарисовать это на пикче. Есть либы в питоне? то что чекаю - нихуя не строит - просто прямую линию рисует между точками.
>>2443500 Пиздец, ебло, ты до сих пор работу что ли не нашло?) Сколько уже блять месяцев прошло а ты до сих пор тут срешь? что за нелепая и неэффективная хуета на 1м скрине? ничего удивительного что ты нахуй на рынке никому не нужен
Посоветуйте современные книги по питону. Или выскажите мнение по лутцу(начал с него). Меня впринципе не пугает стиль лутца, всё ок. Вопрос больше в актуальности того, что он там рассказывает.
>>2443651 >выскажите мнение по лутцу 5 из 10. Много воды, но сам язык он разбирает по косточкам. Смысла не вижу его именно читать. Лучше держать его под рукой и обращаться к нему время от времени.
>>2443651 И еще вопрос, что действительно пишется на питоне и за что деньгу иметь можно на практике?
По запросам в гугле там целый набор, от игр до космолётов, но я же понимаю, что игры там 1 из миллиона делается на питоне, а космодесантом мне не стать.
А хули из класса А вызывается метод если из класса Б его вызываю? Неужели нельзя запомнить, какие методы есть у текузего класса и из него в первую очередь звать. И как мне звать из класса Б когда одинаковые имена в разных классах? Что за хуйня?
>>2444079 Я как разрабодчик класса Б и подумать не мог, что кто-то захочет унаследоваться от него и от ещё какого-то класса, у которого будет метод с таким же именем. Как мне такое надо было нормально делать чтобы не словить такой нежданчик?
>>2444080 А вот это никак. Я помню наследовался от класса, и создал сложную переменную, по типу urllib3_client - и всюду ошибки высыпались. Оказывается, по какой-то случайности в родном классе была такая же переменная, лол.
>>2443325 Я даже не могу уловить что ты спрашиваешь. \n - символ переноса строки. Если ты выведешь строку, он тебе может так и написать с \n и другими спецсимволами. Если ты напишешь print, то он будет переносить строку, но это потому что в print есть специальный код для этого (скорее всего не в ней, а ниже, ну да не суть)
>>2443472 >самый эффективный способ В плане кода или в плане производительности? https://ideone.com/Ao5iKb Быстрее всего через нумбу будет, второе по скорости извращение вроде моего на нумпи. Да, преобразовать лист в нумпи-массив, посчитать, и потом обратно в лист будет быстрее, чем что угодно с листом бесполезным и тормозным.
>>2444080 Замечание правильное. В других языках есть и private-члены, и protected-члены и слово virtual. В питоне можно использовать двойное подчеркивание __hello() или вызывать нужную версию B.hello(self)
Помогите плс с парсингом, я даже не вкатун, просто пытаюсь некоторые свои задачи решать через код, понимаю очень мало. Вот у меня есть страница и там значит такая структура div class = content inner <section> <table> <tbody> <tr> <td> <section> <table> <tbody> <tr> <td> <section> </section> Вот я хочу с помощью бьютифулсупа получить содержимое второго section -> tr а я как не подступлюсь к этому говну с .find или .find_all я или получаю огромную кучу несортируемой хуйни либо упираюсь в первый section/первый table итд как выцепить-то бля!
>>2443563 А, так там задача не только под питон, и можно си выбрать. Может, эм, язык говно просто тормозное, не? Там же натурально даже в простом коде разница в сотню раз с си.
Я написал вроде как быстрый код, но тесты крупные скопировать не могу, а на сайте пишет "вердикт: RUNTIME_ERROR" без объяснения причин. Если написать другой, потупее и в лоб, то, ну вот: https://pastebin.com/2h9BFeGq Не знаю ничего про графы и что это такое, и откуда они тут берутся, просто написал как решал бы такую задачу. Графы это разве не про нахождение кратчайшего пути, если у тебя карта есть в виде графа? >https://pastebin.com/M98ZqAPg У тебя какая-то хуета со словарями и deque, я даже не знаю что это в питоне. У тебя же обычного массива достаточно для решения такой задачи, который (по крайне мере в с++) на порядок быстрее любого ассоциативного, который тут совсем не нужен. Там короче цифры к кольцам сходятся, я нахожу кольца и нумерую их - ученики из кольца останавливаются на себе же, ученики присоединяющиеся к кольцам останавливаются на первом ученике попавшем в кольце. А у тебя хуета с полным перебором, где ты дублируешь вычисления многократно с каким-то хреновым асимптотическим временем вычисления - боюсь представить как твой код на 100к учениках заработает...
>>2444570 Блэ, вот норм мужицкий ответ. А не невнятные виляния очком что делал анон пару постов назад. Сам нихуяшеньки не знал но корчил из себя дохуя умудренного
>>2444080 Ответ: если человек хочет множественно наследоваться от классов, которые для множественного наследования не предназначались - это его проблемы. По-хорошему, множественное наследование должно выглядить как "1 основной класс плюс миксины к нему". Также можно использовать __ перед названием функции, это специально предназначено для избегания конфликта при наследовании (в pep8 так написано).
>>2444681 А там одинаковое количество точек, или может быть такое, что в одной в десять раз больше, и в каких-то местах сгущения, и при этом одна из траекторий ещё и повёрнута? Задача настолько общая, что сходу можно десятки подходов придумать - и в зависимости от входных данных какие-то подходы теряют осмысленность.
>>2444685 Или ещё придумал нарисовать эти отрезки на картиеке с заданной площадью, потом использовать величины площади пересечения по сравнению в общими. Кажется, что-то такое видел в opencv, но поди и попроще библиотеки есть.
>>2444691 >интерполировать точки целыми числами. Хуита. Лучше для каждой точки траектории найди ближайшую точку из соседней траектории (причём с соблюдением порядка (чтобы не было петель пройденных в другую сторону), то есть чтобы ближайшая точка из второй траектории по индексу была больше или как последняя обработанная.), и как меру сходства взять отношение (среднеквадратичного расстояния до точек соседней - расстояние между точками в этом месте)/(расстояние между точками в этом месте) - ну или там меру сам выберешь подходящую. Лучше вместо расстояния до ближайшей точки взять расстояния до кубического сплайна (особенно если траектория физическая и там была инерция) построенного по второй траектории, и следить за порядком всё так же. Такой алгоритм и меру сходства выдаст, и позволит найти такое, если в первой траектории отрезок от 10% до 40% совпадает с отрезком второй траектории от 70% до 90%.
Мяу, могу накидать код, если дашь по десять кривых. Чтобы степень зашумлённости посмотреть и сложности траекторий.
>>2444697 Тоже хуета, нечувствительная к мелким деталям и обходу петель не в том направлении. И ещё плохо применимая для 3d, у тебя (у твоего компьютера) крыша поедет рендерить трёхмерный массив, если там мелкие детали есть.
Сап. Мб кто-нибудь может сообразить. Как в джанго сделать аннотацию количества записей, за исключением тех, которые пустые? (blank то есть) У меня есть типа товар, у товара отзывы и оценки. Я хочу отображать количество того и другого. Собственно оценка - это поле отзыва, можно просто оценить, а можно добавить ещё текст. Ну и вот, получается количество оценок - это количество всех записей в таблице отзывов, относящихся к товару, потому что нельзя создать отзыв без оценки. А вот количество отзывов (в смысле с текстом) - это количество записей в таблице отзывов, относящихся к товару, у которых в поле текст пустая строка типа. Ну и вот че-то не работает. Я вот так сделал. И у меня всегда количество отзывов и количество оценок одинаковое. То есть типа всегда отрабатывает default у Case. Хотя если в шелле смотрю, то текст у отзыва - пустая строка.
>>2444720 Ну в общем, я подумал, что все равно наверное каждый раз запрашивать такую хуевину у бд, когда кто-то просто на страницу зашел, как-то не очень и добавил просто эти поля к товару, а запросы эти агрегирующие запускаю в методе сейв в модели отзыва и сохраняю их в товаре. Типа считаю всё это только когда кто-то отзыв оставил или поменял.
Сап, имеется одна формочка в tkinter + функционал. В нее пользователь вводит некие данные. Нормально что я сохраняю данные в xml или json, чтобы при повторной загрузке их вывести частично на формочку? Или есть более изящный способ сохранения данных, введенных пользователем. Применение бд "заказчик" не поймет, тк функционал довольно простой. ток не обоссывайте, не являюсь программистом, поэтому тут спрашиваю
Ты можешь использовать в качестве базы sqlite, идёт среди стандартных библиотек питона, дополнительных зависимостей нет, никакие дополнительные сервисы не поднимаются
sqlite хорош тем, что ты можешь сохранять данные в БД, довольно надёжно
Если ты работаешь в режиме разовых дампов, то может тебе проще сохранять в формате pickle. Так ты можешь сохранять данные любой сложности, всякие классы и т.п. json всё-таки сильно ограничен по возможностям
>>2444799 Скажем так, сохраняю: id, дату, путь, название. По факту это данные для бд, но проблема в том, что итоговое приложение надо будет через pyinstaller преобразовать в exe, а надо ли для работы sqlite устанавливать на другой комп саму sqlite, как с postgres или нет? Потому что нужно учесть перспективу раздачи другим пользователям, а ходить по всем и ставить тонну вспомогательного софта не хочется и такое решение задачи не примут. >json всё-таки сильно ограничен по возможностям Мне только записать, прочитать, удалить ненужное >формате pickle видел на ютубе про это что-то, но так и не стал разбираться >Если ты работаешь в режиме разовых дампов здесь я тебе не скажу что да как, ибо это более продвинутый уровень надо иметь, либо опыт выполнения проектов. У меня пока уровень написания скриптов, а не хоть какого-то легковесного приложения.
>>2444819 Смотри документацию на питон, раздел "модули".
sqlite это штатный модуль, sqlite3 называется. Всё сохраняется в один файл.
Впрочем тебе скорее всего это не нужно, а нужно именно в json. Или в pickle.
Короче храни в json, если же будешь понимать, что что-то явно не так, формулируй задачу и задавай вопросы. Довольно часто серьёзный софт хранит данные в json, это нормально.
>>2444890 Я ж говорю, мне ближайшие 4 года похуй, у меня анлимитед подписка на все. Сама суть интересна, почему нормально не крякнули. Могу предположить что с теми ебанутыми способами он может обновляться
А визикод ну хз, вряд ли он может столько сколько пайчарм. Когда-то в детстве пользовал вижуал студию для плюсов, но тот же силайон в разы удобнее и функциональнее.
>>2444893 >Сама суть интересна, почему нормально не крякнули куда уж нормальнее. никто не патчит бинарники, не требует права админа. Распаковать зип, указать пару строк в конфиге (даже регаться для триала не нужно), применить ключ и забыть о проблеме до следующей мажорной версии. Просто время от времени качать дистры с оффсайта ибо когда придет новая мажорка и механизм сломается (как это было недавно), то можно будет просто откатить и ждать пока починят.
>вряд ли он может столько сколько пайчарм ну он и легче. не у всех мощные машины.
В алхимии не избыточен ли подобный вызов? self.session это разумеется AsyncSession. Он работает, но я хз, обязательно ли вызывать session.commit в конце
>>2445441 Это уже нужно траектории смотреть. Взять производную, смотреть чтобы скалярное произведение было положительное, или тем же кодом ещё и производные проверять. Ну это так, вариант сходу.
Дайте мне уже траектории, я же проверить хочу как моя идея сработает, а генерировать - ну, они тогда очень простыми будут, а генерация сложных будет сложнее кода проверки соответствия.
Доброй ночи, аноны, хочу попросить совет или какой нибудь гайд для вкатывания. Пробывал проходить курсы на степике, от задач которые там даются прихуел от жизни. Поймал разочарование полное что забил хуй. И вот хочу спросить либо мне это не дано, либо же я пошёл по какому то не правильному пути?
Heroku прислал письмо, где сказано об окончании халявного хостинга с ноября 2022 года. Кто куда мигрирует? Желательно бесплатный или копеечный хостинг.
Почему старый как говно мамонта петухон одновременно является зумерским языком в наши дни? Откуда такое противоречие, в каком-то детском мультике главный герой писал на петухоне?
Есть один сервис. У него есть жирный стейт, снапшот которого иногда запрашивают клиенты, при этом для каждого клиента применяются определенные фильтры и сами данные на выходе выглядят для каждого немного по разному. Обычно они запрашивают его одновременно и поэтому сервис не всегда успевает отдать его за приемлемое время. Пока сделан костыль, при запросе снапшота эта задача отдается в отдельные процессы на каждого клиента, в принципе все отрабатывает достаточно быстро, но есть одно НО в виде жирнючего стейта который дублируется на каждый процесс. Сам снапшот во время раздачи не меняется. Собственно есть ли в пистоне аналог расшареной памяти между несколькими процессами?
>>2445936 Что-то вроде shared memory есть, ты можешь посмотреть в доке на модуль multiprocessing, но там что-то очень ограниченное.
Я этим никогда не пользовался, даже тестировать не пробовал, я как понимаю, нормальную shared memory на уровене питон-данных ты всё равно не сделаешь, возникают проблемы те же, для чего GIL придумывали, проблемы синхнонизации ещё.
В питоне всё на счётчиках ссылок, вот у тебя в двух процессах что-то ссылается на объект из shared memory. Как ты будешь счётчики ссылок синхронизировать?
Сам по себе стрёмный паттерн. Даже в многопотоке, ты замяешься корректно лочить или обрабатывать ситуации, когда у тебя одни поток читает, а другой меняет этот супер тяжеловесный стейт.
В какой момент ты создаёшь клиенты? У тебя посикс? Ты можешь делать отдельные процессы уже после изменения стейка, использую метод fork для того, чтобы порождать подпроцессы.
>>2445936 Ещё одно, насколько я помню, если ты форкаешь процесс, но при этом не меняешь данные, то реально в памяти хранится только одна физическая копия, размножение делается, если ты что-то реально меняешь в памяти.
По крайней мере на виртуальных машинах такое что-то работает.
Надо уточнять-проверять, сейчас немного лень. Но если тебе важно, проверь вот это вот.