Задать вопрос
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())
  • Вопрос задан
  • 109 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Herben
client = await AsyncClient.create()
async def get_trades(self):
    global client

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

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

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

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