Асин c л oop без aiohttp - PullRequest
0 голосов
/ 01 мая 2020

Я нашел библиотеку с операциями на биржах, мне нужно сделать asyn c или другой метод, например asyn c. Мой код:

import ccxt

binance = ccxt.binance()
    for pair in binance.load_markets(): // example: pair = BTC/USDT or ETH/BTC ...
        print(binance.fetch_order_book(pair, 5))

Мне нужно сделать эту функцию очень быстрой, потому что она очень медленная. Ранее я использовал asyn c и aiohttp вроде:

async def main():
    async with aiohttp.ClientSession() as session:
        await asyncio.wait([fetch(self, session, url) for url in urls])
    print('Done')

async def fetch(session: aiohttp.ClientSession, url: str):
    async with session.get(url) as content:
        content = await content.json()
        print(f"Requested: {url}")

def run():
    loop = asyncio.get_event_loop()
    try:
        loop.run_until_complete(main())
        loop.run_until_complete(asyncio.sleep(2.0))
    finally:
        loop.close()

Мне нужно что-то подобное. С уважением.

1 Ответ

0 голосов
/ 01 мая 2020

Я делаю это:

import asyncio
import ccxt

tab_symbols = []

async def fetch(pair, client):
   async with client.binance().fetch_order_book(pair, 5) as response:
        return await print(response)

async def run(tab):
    tasks = []

    async with ccxt.binance() as client:
        for x in tab:
            task = asyncio.ensure_future(fetch(x, client))
            tasks.append(task)

       responses = await asyncio.gather(*tasks)
       print(responses)

if __name__ == '__main__':
    binance = ccxt.binance()

    for x in binance.load_markets():
        tab_symbols.append(x)
        print(x)
    loop = asyncio.get_event_loop()
    future = asyncio.ensure_future(run(tab_symbols))
    loop.run_until_complete(future)

Но у меня есть исключение:

async with ccxt.binance() as client:
AttributeError: __aexit__

Что не так?

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