Bogdan (SirEdvin)
Асинхронщина
PollyCode
в твоем случае лучше асинхронка
Bogdan (SirEdvin)
Именно. Дешевле и ты должен их аккуратно контролировать.
Можно подумать, что многопоточность на тредах проста
Tishka17
Можно подумать, что многопоточность на тредах проста
Для многих задач проще. особенно если юзать не всякие мьютексы, а готовые очереди и прочее
PollyCode
треды лучше использовать если есть тесное общение между потоками и есть использование i/o
Bogdan (SirEdvin)
А ещё асинхронность на корутинах в случае cpu-bound задач требует ручного переключения
Мне кажется, для cpu задач обычно используют c-extensions, которые обходят gil, или что-то типа celery
Tishka17
Или когда вообще независимые части
Tishka17
Короче, речь была о том, что плюс asyncio не так очевиден
Tishka17
И да, почему вы сразу о тредах. Есть процессы
løst
с языка снял
Bogdan (SirEdvin)
Для многих задач проще. особенно если юзать не всякие мьютексы, а готовые очереди и прочее
А в питоне есть очереди на тредах? Опять же, в очень большом пласте задач (привет, веб-приложения), где синхронизация не уперлась, асинхронщина очень даже ничего
Tishka17
И кстати, кто-то из присутствующих гонял тесты, на каком числе параллельных задач с i/o появится заметное ускорение от использования корутин вместо тредов/процессов?
Oleg
Короче, речь была о том, что плюс asyncio не так очевиден
ну уж нет. Событийная обработка io гораздо эффективнее тредов, просто при малом кол-ве задач, это может быть не сильно заметно
Tishka17
ну уж нет. Событийная обработка io гораздо эффективнее тредов, просто при малом кол-ве задач, это может быть не сильно заметно
Вообще, если я правильно помню, там весь эффект в куске, ответственном за чтение из системного буфера в питоновский объект. Если данных не много, разница будет меньше
Oleg
Вообще, если я правильно помню, там весь эффект в куске, ответственном за чтение из системного буфера в питоновский объект. Если данных не много, разница будет меньше
Понятно, что в определнных сценариях разница может быть менее заметна. Но в целом thread'ы (независимо от ЯП) приводят к context switch'ам
løst
кто за тайпинг шарит?
løst
как можно указать аннотацию что лист возвращает только 1 элемент?
løst
или достаточно бредовая затея?
Oleg
как можно указать аннотацию что лист возвращает только 1 элемент?
что значит list возвращает только один элемент?
Oleg
можешь пример кода привести?
løst
длина = 1
Oleg
а зачем такой list нужен?
Oleg
ну если уж надо то используй tuple
Oleg
list сам по себе может быть любой длины. Поэтому такого тайпхинта существовать не может
Oleg
Tuple[int]
løst
ну это я знаю...
Oleg
а зачем тебе именно mutable коллекция из одного элемента?
løst
а зачем тебе именно mutable коллекция из одного элемента?
она не совсем мне нужна, она может вернутся из метода, нужно глянуть...
løst
метод выплёвывает List[Dict]
løst
но, в каких-то краевых случаях я знаю что будет всего 1 дикт внутри
Oleg
и где тебе тогда нужен такой тайпхинт?
Oleg
если метод может возвращать список больше чем из одного элемента, то текущий тайпхинт у него верный
løst
наверное, перемудрил)
Oleg
Можно переделать метод чтобы он возвращал Union[List[Dict], Dict], но в коде потом все равно придется делать проверку на то какой тип вернулся. Так что смысла в этом нет, проще провереть длину list'а
Oleg
если возвращаемы тип зависит от типа входных параметров, то можно еще @overload использовать
Tishka17
Есть кстати безумная идея
Tishka17
Типы с ограничениями по допустимым значениям
Tishka17
Например, что какая-то целая переменная бывает только от 1 до 100. Или список с длиной не больше 5
Bogdan (SirEdvin)
Литералы есть, в екстеншинах
Tigran
Добро пожаловать в контрактное программирование
Tishka17
Гляну
Aragaer
уже началось первое апреля и теперь это чатик контрактного программирования?
Oleg
да, литералы в одной из последних версий mypy завезли
Oleg
Например, что какая-то целая переменная бывает только от 1 до 100. Или список с длиной не больше 5
Тогда ты сможешь использовать этот тип только если явно присваеваешь ему конкретное значение, т.е. это не может быть результатом каких-то вычислений
Tishka17
уже смотрю, да
Tishka17
чет похоже на enum
Tishka17
кажется, слабовато это пока
Oleg
в общем сомнительная вещь
Oleg
для bool'ов совместно с @overload, наверное, можно использовать
Oleg
если в зависимости от значения bool может быть недопустимо использование других аргументов или меняется возвращаемый тип
Oleg
зависимость возвращаемого типа от типа аргументов
Pavel
Hello all!I have this wall of text.
Pavel
Archive(r'CUsers\***\Desktopen-ro-rarcab1.cab').extractall(r'CUsers\***\ktopen-ro-rar') Archive(r'CUsers\***\Desktopen-ro-rarcab2.cab').extractall(r'CUsers\***\ktopen-ro-rar') Archive(r'CUsers\***|Desktopen-ro-rarcab3.cab').extractall(r'CUsers\***\ktopen-ro-rar')
Pavel
And these are only three archives.Can I shorten it somehow? for example that the like
Pavel
Archive(***** cab1,cab2,cab3)extractall(****)
Pavel
Да чтож такое +) опять ошибся чатом
Pavel
тут же по русски -)
Tishka17
это powershell?
Pavel
ЧЗХ?
ну это указание на на архив в папке
Pavel
ЧЗХ?
и разорхевация его
Tishka17
хз что за Archive
Pavel
хз что за Archive
import pyunpack это его фишка
Tishka17
и зачем пиать инсталлятор на питоне
Pavel
и зачем пиать инсталлятор на питоне
я не пишу инсталятор =) я его открываю и разбираю
Pavel
и зачем пиать инсталлятор на питоне
и в нём есть тьма архивов =) в связи с недорстаточностью знаний возник вопрос.Как делать не по тупому в лоб а кошерно и красиво
Tishka17
хочется уточнить, а зачем тебе распаковывать инсталлятор?ё
Tishka17
pyunpack зависит от patool, а вот его сорцы: https://github.com/wummel/patool/blob/master/patoolib/__init__.py#L140 https://github.com/wummel/patool/blob/master/patoolib/programs/cabextract.py
Tishka17
предлагаю посомтреть что сам cabextract умеет