遇到奇怪的问题。我正在尝试从 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 运行多个任务。
明白了! 问题是
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())