Я собираю торговые данные из широкого спектра криптовалютных бирж через веб-сокеты и затем сохраняю их в файлы .csv. Это работает для всех бирж уже две недели, за исключением моего скрипта Bitfinex ниже.
import websocket
import pandas as pd
import json
import time
import datetime
import os
df = pd.DataFrame(columns=['id','time','amount','price'])
trades = []
folder = r'/realtimedata/trades/bitfinex/btcusd/bitfinex_btcusd_trades_'
def on_message(ws, message):
msg = json.loads(message)
if msg[1] == 'te':
print("Bitfinex BTCUSD Trades - "+str(msg[2]))
global df
trades.append(msg[2])
df = pd.DataFrame(trades)
df = df[-1:]
df = df.drop(0,axis=1)
if not os.path.isfile(folder + str(datetime.datetime.today().strftime('%Y_%m_%d') + '.csv')):
df.to_csv(folder + str(datetime.datetime.today().strftime('%Y_%m_%d') + '.csv'),header ='column_names', index=False)
else: # else it exists so append without writing the header
df.to_csv(folder + str(datetime.datetime.today().strftime('%Y_%m_%d') + '.csv'),mode = 'a',header=False, index=False)
def on_error(ws, error):
print(error)
def on_close(ws):
print("### closed ###")
def on_open(ws):
ws.send(json.dumps({"event":"subscribe", "channel":"trades", "pair":"BTCUSD"}))
while True:
if __name__ == "__main__":
ws = websocket.WebSocketApp("wss://api.bitfinex.com/ws/2",
on_message=on_message,
on_error=on_error,
on_close=on_close)
ws.on_open = on_open
ws.run_forever()
Результат этого в течение нескольких дней выглядит следующим образом: Как вы можете видеть, после того, как в течение первых 3,5 дней он работал отлично, он начинает периодически пропускать часы, и я нахожусь в потеря относительно того, почему или как это исправить, особенно если учесть, что мои другие идентичные сценарии для других обменов работают.
Поскольку это нечасто и может работать часами, у меня нет примеров ошибок / сообщений / подсказок относительно того, что происходит, когда запись не ведется. Я предоставлю как можно больше информации.
- Перезапуск сценария полностью работал в течение последних 12 часов (возможно, скоро снова выйдет из строя?)
- Когда я проверял временные метки входящих сообщений перед перезапуском .. они не были текущего времени. Они отставали, поскольку я принимал их на X часов.
- Я собираю BTC и ETH двумя сценариями на Bitfinex таким способом. Одна и та же проблема возникла в обоих случаях, но в разное время.
- Это все работает на сервере AWS t2.medium в tmux, где одновременно работают 10 других сценариев.
Я надеюсь, что у кого-то с большим опытом может быть предложение, как это исправить. Я не против пропустить несколько секунд здесь и там, если есть хакерский обходной путь. Могу я просто автоматически закрывать / перезапускать скрипт каждые 24 часа? Как бы я поступил так?
Спасибо.