@ru_python

Страница 8583 из 9768
Tishka17
01.04.2019
05:16:26
а в луп запихал авейтов понаставил и радуйся
То есть треды проще чем корутины?

Ну ну

Корутина повисла и всё, кердык

А тред проге не мешает

Google
lost
01.04.2019
05:16:47
я вообще-то наоборот имел ввиду(

any
01.04.2019
05:17:13
lost
01.04.2019
05:17:39
ну там много приколов, например те же самые ексепшены, о которых ты узнаешь только когда луп всё наружу выплюнет

Винни
01.04.2019
05:17:50
пацаны, пизда рулю, даже линукс поставить не могу, настолько все плохо. Винда опять распоясалась

поскольку я всегда знал, что Дуров замутил ТГ неубиваемым, оно есть таким и сейчас. Например, я не могу получить доступ к сайтам, да даже гугл не пингуется! А вот тыгэ работает, как ни в чем ни бывало. Кстати, я щас по проводу сижу, так время от времени эта шайтан-машина переключается между вафлей и проводом

с телефона все работает прекрасно, плюс линия полностью свободна, выдает тридцатку mbps

Bogdan (SirEdvin)
01.04.2019
05:18:57
Ну а чем плох синхронный, когда есть треды? ;-)
Попробуйте создать штук 50000 тредов

Tishka17
01.04.2019
05:20:28
Попробуйте создать штук 50000 тредов
А часто у тебя 50000 параллельных корутин?

?? Eugene
01.04.2019
05:20:35
Попробуйте создать штук 50000 тредов
Создать без проблем можно, хоть миллион)

Bogdan (SirEdvin)
01.04.2019
05:22:21
А часто у тебя 50000 параллельных корутин?
Ну, попробуйте 100 тредов, просто на 50000 разница прямо в глаза бросается.

100 корутин у меня часто бывает

Tishka17
01.04.2019
05:22:22
Google
LighteR
01.04.2019
05:22:22
Зачем нужны корутины тоже ещё надо суметь объяснить
Да я больше не про объяснение того как это работает внутри, а про то, что человек говорил, что не понимает зачем вообще использовать yield. Вот асинхронщина хороший пример в том плане, что тебе в любом случае приходится использовать корутины (можно конечно и на callback'ах все писать, но кто так будет делать?)

Tishka17
01.04.2019
05:22:37
?? Eugene
01.04.2019
05:24:59
На 100 тредах вообще никаких проблем
Ну с тредами все же больший оверхед будет, но да, будет работать

Tishka17
01.04.2019
05:25:47
MIKS
01.04.2019
05:29:12
А сколько памяти занимает один поток в пайтон?

Tishka17
01.04.2019
05:30:53
Предполагаю чуть больше чем в любом другом языке

Это реальный поток ОС

lost
01.04.2019
05:32:13
ну и от платформы наверное еще будет зависеть

Bogdan (SirEdvin)
01.04.2019
05:32:24
На 100 тредах вообще никаких проблем
Ну да, переключения gil вообще фигня.

LighteR
01.04.2019
05:33:15
Ну да, переключения gil вообще фигня.
переключение контекста ты хотел сказать?

lost
01.04.2019
05:33:21
если ты сравниваешь асинхронщину и трединг - предполагается что у тебя io bound, при чем тут gil

LighteR
01.04.2019
05:33:28
gil не переключается, он захватывается

Tishka17
01.04.2019
05:33:48
Ну да, переключения gil вообще фигня.
Эм, окей. Треды + процессы. Но вообще я про вытесняющую многозадачность vs кооперативную. Эффект не всегда очевиден и не всегда однозначен

Bogdan (SirEdvin)
01.04.2019
05:34:22
Он отпускается и захватывается снова и снова. В итоге немного больно, и чем больше тредов, тем веселее

Tishka17
01.04.2019
05:34:32
Можно подумать у тебя в корутинах больше одного куска питоновского кода работает

Bogdan (SirEdvin)
01.04.2019
05:35:36
Но переключения дешевле и не рандомны

LighteR
01.04.2019
05:35:43
Он отпускается и захватывается снова и снова. В итоге немного больно, и чем больше тредов, тем веселее
боль от большого кол-ва thread'ов/процессов не особенно связана c GIL, проблема из-за того что context switch довольно дорогая операция. Это не связано вообще с ЯП

Tishka17
01.04.2019
05:36:16
Но переключения дешевле и не рандомны
Именно. Дешевле и ты должен их аккуратно контролировать.

А ещё асинхронность на корутинах в случае cpu-bound задач требует ручного переключения

Bogdan (SirEdvin)
01.04.2019
05:37:21
боль от большого кол-ва thread'ов/процессов не особенно связана c GIL, проблема из-за того что context switch довольно дорогая операция. Это не связано вообще с ЯП
В третьем питоне gil еще рандомно отпускается во время выполнение кода, что приводит к расходам сверх переключения контекста

Google
Worlak
01.04.2019
05:37:25
А что лучше при Парсинга данных с сайтов, треды или асинхронщина?

Bogdan (SirEdvin)
01.04.2019
05:37:35
Асинхронщина

Toy
01.04.2019
05:37:57
в твоем случае лучше асинхронка

Bogdan (SirEdvin)
01.04.2019
05:37:58
Именно. Дешевле и ты должен их аккуратно контролировать.
Можно подумать, что многопоточность на тредах проста

Tishka17
01.04.2019
05:38:41
Можно подумать, что многопоточность на тредах проста
Для многих задач проще. особенно если юзать не всякие мьютексы, а готовые очереди и прочее

Toy
01.04.2019
05:38:57
треды лучше использовать если есть тесное общение между потоками и есть использование i/o

Bogdan (SirEdvin)
01.04.2019
05:39:01
А ещё асинхронность на корутинах в случае cpu-bound задач требует ручного переключения
Мне кажется, для cpu задач обычно используют c-extensions, которые обходят gil, или что-то типа celery

Tishka17
01.04.2019
05:39:16
Или когда вообще независимые части

Короче, речь была о том, что плюс asyncio не так очевиден

И да, почему вы сразу о тредах. Есть процессы

lost
01.04.2019
05:40:35
с языка снял

Bogdan (SirEdvin)
01.04.2019
05:41:19
Для многих задач проще. особенно если юзать не всякие мьютексы, а готовые очереди и прочее
А в питоне есть очереди на тредах? Опять же, в очень большом пласте задач (привет, веб-приложения), где синхронизация не уперлась, асинхронщина очень даже ничего

Tishka17
01.04.2019
05:41:40
И кстати, кто-то из присутствующих гонял тесты, на каком числе параллельных задач с i/o появится заметное ускорение от использования корутин вместо тредов/процессов?

LighteR
01.04.2019
05:42:10
Короче, речь была о том, что плюс asyncio не так очевиден
ну уж нет. Событийная обработка io гораздо эффективнее тредов, просто при малом кол-ве задач, это может быть не сильно заметно

Tishka17
01.04.2019
05:44:06
ну уж нет. Событийная обработка io гораздо эффективнее тредов, просто при малом кол-ве задач, это может быть не сильно заметно
Вообще, если я правильно помню, там весь эффект в куске, ответственном за чтение из системного буфера в питоновский объект. Если данных не много, разница будет меньше

LighteR
01.04.2019
05:48:14
Вообще, если я правильно помню, там весь эффект в куске, ответственном за чтение из системного буфера в питоновский объект. Если данных не много, разница будет меньше
Понятно, что в определнных сценариях разница может быть менее заметна. Но в целом thread'ы (независимо от ЯП) приводят к context switch'ам

lost
01.04.2019
05:53:29
кто за тайпинг шарит?

Google
lost
01.04.2019
05:53:46
как можно указать аннотацию что лист возвращает только 1 элемент?

или достаточно бредовая затея?

LighteR
01.04.2019
05:54:06
как можно указать аннотацию что лист возвращает только 1 элемент?
что значит list возвращает только один элемент?

можешь пример кода привести?

lost
01.04.2019
05:54:15
длина = 1

LighteR
01.04.2019
05:54:31
а зачем такой list нужен?

ну если уж надо то используй tuple

list сам по себе может быть любой длины. Поэтому такого тайпхинта существовать не может

Tuple[int]

lost
01.04.2019
05:57:11
ну это я знаю...

LighteR
01.04.2019
05:58:02
а зачем тебе именно mutable коллекция из одного элемента?

lost
01.04.2019
05:58:57
а зачем тебе именно mutable коллекция из одного элемента?
она не совсем мне нужна, она может вернутся из метода, нужно глянуть...

метод выплёвывает List[Dict]

но, в каких-то краевых случаях я знаю что будет всего 1 дикт внутри

LighteR
01.04.2019
06:02:22
и где тебе тогда нужен такой тайпхинт?

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

lost
01.04.2019
06:03:49
наверное, перемудрил)

LighteR
01.04.2019
06:18:33
Можно переделать метод чтобы он возвращал Union[List[Dict], Dict], но в коде потом все равно придется делать проверку на то какой тип вернулся. Так что смысла в этом нет, проще провереть длину list'а

если возвращаемы тип зависит от типа входных параметров, то можно еще @overload использовать

Tishka17
01.04.2019
06:20:30
Есть кстати безумная идея

Google
Tishka17
01.04.2019
06:20:42
Типы с ограничениями по допустимым значениям

Например, что какая-то целая переменная бывает только от 1 до 100. Или список с длиной не больше 5

Bogdan (SirEdvin)
01.04.2019
06:21:31
Литералы есть, в екстеншинах

Tigran
01.04.2019
06:21:37
Добро пожаловать в контрактное программирование

Aragaer
01.04.2019
06:22:07
уже началось первое апреля и теперь это чатик контрактного программирования?

LighteR
01.04.2019
06:22:16
да, литералы в одной из последних версий mypy завезли

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

Tishka17
01.04.2019
06:26:49
уже смотрю, да

Страница 8583 из 9768