Python-binance 和 asyncio

问题描述 投票:0回答:1

遇到奇怪的问题。我正在尝试从 Binance 获取一些数据(使用 python-binance 包)。我非常简单的代码:

import asyncio
from binance.client import AsyncClient

async def get_data(client):
  res = await client.get_klines(symbol='BTCUSDT', interval='15m', limit=99)
  print(res)

async def main():
  client = await AsyncClient.create()
  asyncio.create_task(get_data(client=client))

asyncio.run(main())

此代码不起作用。 执行在

res = await client.get_klines(...)
处停止。但如果我改变跑步方式
get_data()
,那么它就会开始工作。来看看吧

import asyncio
from binance.client import AsyncClient

async def get_data(client):
  res = await client.get_klines(symbol='BTCUSDT', interval='15m', limit=99)
  print(res)

async def main():
  client = await AsyncClient.create()
  await get_data(client=client)

asyncio.run(main())

上面的代码运行良好,但不符合我的需求。我需要使用 Binance API 运行多个任务。

python asynchronous python-asyncio binance
1个回答
0
投票

明白了! 问题是

main()
不会等待其他任务完成,因此我们需要告诉它等待它们。例如使用
asyncio.gather()
:

import asyncio
from binance.client import AsyncClient

async def get_data(client):
  res = await client.get_klines(symbol='BTCUSDT', interval='15m', limit=99)
  print(res)

async def main():
  client = await AsyncClient.create()
  await asyncio.gather(
    get_data(client=client)
  )

asyncio.run(main())
© www.soinside.com 2019 - 2024. All rights reserved.