#python #websocket #timeout #binance
#python #websocket #тайм-аут #binance
Вопрос:
Я пытаюсь установить тайм-аут, чтобы моя база данных загружалась с записью каждые 1 секунду. я пробовал решение из документации python-binance, но, похоже, оно не работает.
Прямо сейчас я получаю слишком много данных, например, 20 записей за 1 секунду, и я бы хотел, чтобы он получал 1 запись за 1 секунду.
python-binance doc: https://python-binance.readthedocs.io/en/latest/websockets.html#threadedwebsocketmanager-websocket-usage
Функция с таймаутом:
bm = BinanceSocketManager(client, user_timeout=1000)
Мой код:
import pandas as pd
import sqlalchemy
import asyncio
from binance import AsyncClient, BinanceSocketManager
def createframe(msg):
df = pd.DataFrame([msg])
df = df.loc[:, ['s', 'E', 'p']]
df.columns = ['symbol', 'Time', 'Price']
df.Price = df.Price.astype(float)
df.Time = pd.to_datetime(df.Time, unit='ms')
return df
async def main():
client = await AsyncClient.create()
bm = BinanceSocketManager(client, user_timeout=1000)
# start any sockets here, i.e a trade socket
ts = bm.trade_socket('BTCUSDT')
# then start receiving messages
async with ts as tscm:
while True:
res = await tscm.recv()
frame = createframe(res)
print(frame)
frame.to_sql('BTCUSDT', 'sqlite:///stream.db', if_exists='append', index=False)
await client.close_connection()
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(main())