SubUser
@SubUser
Когда уже на завод

Как назначить асинхронный клиент для всего класса?

как я могу определить асинхронный клиент только один раз - одно подключение к серверу, а затем работать с ним, но я не могу понять, как определить этот клиент глобальным для класса. Я просто догадался создавать новое соединение перед каждым использованием, но, конечно, это лишняя трата времени. Буде рад любым предложениям. Библиотека: https://pypi.org/project/python-binance/
Рабочий код:

import asyncio
from binance import AsyncClient

class Binance:
    async def get_trades(self):
        client = await AsyncClient.create() # define two times(two connections) need only one
        aggregate_trades = await client.get_all_tickers()
        print(aggregate_trades)
        await client.close_connection()

    async def exchange_info(self):
        client = await AsyncClient.create() # define two times(two connections) need only one
        exchange_info = await client.get_exchange_info()
        print(exchange_info)
        await client.close_connection()

async def main():
    b = Binance()
    await asyncio.gather(b.get_trades(), b.exchange_info())
 
if __name__ == "__main__":
    asyncio.run(main())


Должно быть (но не работает):

import asyncio
from binance import AsyncClient

class Binance:
    def __init__(self):
        asyncio.run(self.async_init())

    async def async_init(self):
        self.client = await AsyncClient.create() # define only one time because use much time

    async def get_trades(self):
        aggregate_trades = await self.client.get_all_tickers()
        print(aggregate_trades)

    async def exchange_info(self):
        exchange_info = await self.client.get_exchange_info()
        print(exchange_info)

async def main():
    b = Binance()
    await asyncio.gather(b.get_trades(), b.exchange_info())
 
if __name__ == "__main__":
    asyncio.run(main())
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ответы на вопрос 3
@bacon
самое простое, удалить __init__ и поправить main
async def main():
    b = Binance()
    await b.async_init()
    await asyncio.gather(b.get_trades(), b.exchange_info())
Ответ написан
@Herben
client = await AsyncClient.create()
async def get_trades(self):
    global client

async def exchange_info(self):
    global client
Ответ написан
vabka
@vabka
Токсичный шарпист
Можно инициализировать клиент где-нибудь заранее, и прокинуть в конструктор класса уже готовый.

Для удобства можно сделать статичный метод, который сделает всё сам
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
17 авг. 2022, в 04:45
20000 руб./за проект
17 авг. 2022, в 02:30
3000 руб./за проект
17 авг. 2022, в 02:19
500 руб./за проект