170 похожих чатов

Я опять пытаюсь воткнуть в асинкио, и опять он мне

не дается. Во всех статьях, которые я видел, либо "ну вот у нас тут две таски с asyncio.sleep(), вот мы их собрали в asyncio.gather, вот они выполнились почти одновременно", либо "вот у нас сервер на 100500 рпс, смотрите код". Я и смотрю этот код, и не понимаю, почему он написан так, как написан. Причем я ж абсолютно уверен, что там далеко не ракетная наука, но какого-то deeper dive не хватает. Что почитать/посмотреть, чтобы наконец воткнуть в то, как асинхронщина в питоне работает? Английский, русский, без разницы. Английский наверное предпочтительнее даже.

20 ответов

27 просмотров

можешь начать отсюда http://www.kegel.com/c10k.html

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

SayHelloRoman
Почитать о мютекс, как он работает. Асинхроность п...

> Асинхроность почти одинаковая во всех языках и в каких же языках она одинаковая? смотря что понимать под "асинхронностью"

Alex
> Асинхроность почти одинаковая во всех языках и ...

Работает по одинаковому принципу, тоесть мютекс, евент луп, таски и так далее

malorin-K. Автор вопроса
Alex
можешь начать отсюда http://www.kegel.com/c10k.htm...

Не, в общих-то чертах я представляю и отличие асинка от тредов (и их обоих от мультипроцессинга), и что такое ивентлуп, я скорее реализацию понять не могу. Например, насколько я понимаю, async используется для объявления корутин, а await - это аналог next(), только для корутин. Но тут же в доке по aiohttp я вижу: async with aiohttp.ClientSession() as session: async with session.get('http://httpbin.org/get') as resp: print(resp.status) print(await resp.text()) Почему статус не await, а text await? Откуда вообще async в контекстных менеджерах взялся?

malorin K.
Не, в общих-то чертах я представляю и отличие асин...

1. async в контекстных менеджерах взялся из __aenter__ \ __aexit__

malorin K.
Не, в общих-то чертах я представляю и отличие асин...

Статус уже есть в объекте который тебе вернули

malorin K.
Не, в общих-то чертах я представляю и отличие асин...

это выглядит примерно так. 1. ты делаешь запрос. уходишь в первый await пока тебе не приедет порция ответа 2. тебе начинат приходить ответ. библиотека парсит заголовки и отдает тебе управление, чтобы ты решил что делать дальше 3. ты делаешь await response.text() который догружает полностью тело ответа и возвращает результат тебе

SayHelloRoman
Статус уже есть в объекте который тебе вернули

Статус - это проперти, я не знаю ни одного языка который умеет делать асинхронные поля. Разве что какие-то с акссесором (но зачем?) await resp.text() - text() - асинхронная функция

First Last
Статус - это проперти, я не знаю ни одного языка к...

А await там нужен для того, чтобы ты видел текст, а не объект Future

malorin-K. Автор вопроса
Alex
это выглядит примерно так. 1. ты делаешь запрос. ...

Окей, так в принципе начинает проясняться что-то. А в чем тайный смысл асинковых enter-exit? Ну в смысле, я знаю, что в синхронном виде они используются для контекстных менеджеров, а тут соответственно для асинхронных КМ, но что именно нам это дает?

malorin K.
Окей, так в принципе начинает проясняться что-то. ...

В обычном контекстном менеджере нельзя во время входа или выхода сделать что-то асинхронное.

malorin K.
Окей, так в принципе начинает проясняться что-то. ...

здесь это нужно чтобы корректно закрыть сессию.

malorin-K. Автор вопроса
malorin-K. Автор вопроса
decorator-factory
В обычном контекстном менеджере нельзя во время вх...

То есть async with нам нужен только для того, чтобы в нем мы могли await'ить реквесты, иначе это мог бы спокойно быть и обычный with. Верно?

malorin K.
То есть async with нам нужен только для того, чтоб...

нет. async with нужен затем что в методах __aenter__ и __aexit__ могут быть await конструкции грубо говоря

malorin-K. Автор вопроса
Alex
session = aiohttp.ClientSession() ... await sessio...

Так. То есть, если бы session.close() не был async, мы могли бы писать with, а не async with? Другими словами, могу ли я эвэйтить что-то внутри обычного, не асинхронного with?

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта