Skip to content

what is the right way to use Backends without Feedhandler to store Exchange rest data? #1045

@keiser1080

Description

@keiser1080

hi
i am trying to fetch historical exchange data,
and to use backend callback to store the data.

My code do the job but i am looking a cleaner way to do that.

import json from datetime import datetime import asyncio from datetime import timedelta, UTC from cryptofeed import FeedHandler from cryptofeed.backends.quest import CandlesQuest from cryptofeed.defines import CANDLES from cryptofeed.exchanges import BinanceFutures from backtest.config import settings bf = BinanceFutures() cq = CandlesQuest(host=settings.quest_host, port=settings.quest_port) # async def candle_callback(c, receipt_timestamp): # print(f"Candle received at {receipt_timestamp}: {c}") async def get_history(loop, start, end): cq.start(loop) cq.running async for data in bf.candles( "BTC-USDT-PERP", start, end, ): print("=================") for row in data: d = row.to_dict() d["receipt_timestamp"] = d["timestamp"] + 1 await cq(row, d["receipt_timestamp"]) await cq.stop() return def main(): config = {"log": {"filename": "demo.log", "level": "DEBUG", "disabled": False}} today = datetime.now(UTC) yesterday = datetime.now(UTC) - timedelta(minutes=24) start = yesterday.strftime("%Y-%m-%d %H:%M:%S") end = today.strftime("%Y-%m-%d %H:%M:%S") f = FeedHandler(config=config) f.run(start_loop=False) f.add_feed( BinanceFutures( symbols=["BTC-USDT-PERP"], channels=[CANDLES], callbacks={ CANDLES: CandlesQuest( host=settings.quest_host, port=settings.quest_port ) }, ) ) loop = asyncio.get_event_loop() # loop.create_task(get_history(loop, start, end)) loop.run_until_complete(get_history(loop, start, end)) loop.run_forever() if __name__ == "__main__": main() 

It work until but it raise an exception when i stop the script "CTRL-C"

2024-06-27 17:06:56,495 : INFO : BINANCE_FUTURES: starting backend task CandlesQuest with multiprocessing=False 2024-06-27 17:06:56,497 : DEBUG : BINANCE_FUTURES.http.0: create HTTP session 2024-06-27 17:06:56,497 : DEBUG : BINANCE_FUTURES.http.0: requesting data from https://fapi.binance.com/fapi/v1/klines?symbol=BTCUSDT&interval=1m&limit=1000&startTime=1719520976000&endTime=1719522416000 2024-06-27 17:06:56,515 : DEBUG : BINANCE_FUTURES.ws.2: connecting to wss://fstream.binance.com/stream?streams=btcusdt@kline_1m ================= ^CTask was destroyed but it is pending! task: <Task pending name='Task-4' coro=<QuestCallback.writer() running at /home/me/project/backtest/.venv/lib/python3.12/site-packages/cryptofeed/backends/quest.py:27> wait_for=<Future pending cb=[Task.task_wakeup()]>> backtest-py3.12``` 

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions