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

А можно ли сделать асинхронный конструктор?

10 ответов

19 просмотров

Свой отдельный метод. class A: def init(self): ... async def ainit(self): ... foo = A() await foo.ainit()

🚛-Реальный Автор вопроса
shardeex
Свой отдельный метод. class A: def init(self): ...

А мне надо в конструкторе сессию асинхронную поднять, как тогда сделать? UPD. Через 1 сессию в aiohttp можно же кидать несколько раз запросы?

покажи код, может, и не нужно

🚛 Реальный
А мне надо в конструкторе сессию асинхронную подня...

Зачем? Сделай тогда пустой инит, а сразу после вызывай свой асинхронный

🚛 Реальный
А мне надо в конструкторе сессию асинхронную подня...

Сессия как раз для того и нужна, чтобы её один раз создать, и дальше её использовать для большого числа запросов

🚛-Реальный Автор вопроса
decorator-factory
Сессия как раз для того и нужна, чтобы её один раз...

Так я в конструкторе её создать хочу, у меня обёртка для api app = TApi(key=key) await app.minus() # отнимит в сессии await app.balance() # и через ту же сесиию напишет баланс например

🚛 Реальный
Так я в конструкторе её создать хочу, у меня обёрт...

Сессия — это ресурс, который нужно закрывать. Так же как и файл. Поэтому её нужно использовать в контекстом менеджере, как показано в документации: async with ClientSession() as session: ... Так что тут у тебя два варианта: 1. передавать сессию явно (не очень хорошо, потому что то, что используется aiohttp — в общем-то деталь реализации) async with ClientSession() as session: app = TApi(session, key=key) await app.minus() await app.balance() 2. сделать TApi асинхронным контекстным менеджером async with TApi(key=key) as app: await app.minus() await app.balance() Тут можно в __aenter__ создать себе сессию и всё остальное. А в __aexit__ их закрыть. 3. Сделать отдельно стоящий контекстный менеждер import contextlib @contextlib.asynccontextmanager async def create_tapi(key): async with ClientSession() as session: yield TApi(session, key=key)

🚛-Реальный Автор вопроса

Да, я не знаю про них

🚛 Реальный
Да, я не знаю про них

Про контекстные менеджеры: https://realpython.com/python-with-statement/ contextlib: https://docs.python.org/3/library/contextlib.html

🚛-Реальный Автор вопроса
decorator-factory
Про контекстные менеджеры: https://realpython.com/...

То есть функцию саму надо писать в aenter?

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

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

Hi there everyone Is there anyone who have not started hamster bot yet? I need only one, I'll be glad if you do this for me DM if you haven't yet
Mehrshad
53
hi my MyAsus app has informed me of a new version of bios (version 300), i tried installing it but after this attempt it said: Update failed. Does anyone have any solution? My...
Sahand 🏔️
13
всем привет! у кого есть опыт подписания и нотаризации electron приложений для macos? такая проблема: использовал @electron/osx-sign и notaritool. процесс подписания и нотараз...
Артем Клементьев
11
@Dreamer_0x01 @helgispbru @Ambrion Разговор шёл об уязвимости. Меня беспокоит именно она. Все прочие вопросы, а равно и жизненная мудрость - пока в сторону :) Так вот сам ...
Андрей [aharito] Харитонов
9
А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
why some site like google has separate page for username/email and password?
Mr Thieves
21
Может быть небольшое отступление, но я тут решил обратить внимание на то, сколько весит хелловорлд на с++... Зачем он весит почти 250 Кб? У меня оконное приложение на фасме ве...
The Bird of Hermes
14
Тут кто-то шарит в мед оборудовании?
Benz
10
Мне интересно, скорее людей здесь используют D, Rust, C/C++ для решения реальных прикладных задач за деньги?)
Evil Satanson
47
What do you wanna learn?
Malware ( DM = BLOCK )
12
Карта сайта