66 lines
2.2 KiB
Python
66 lines
2.2 KiB
Python
import asyncio
|
|
from loguru import logger
|
|
from typing import List, Dict
|
|
import signal
|
|
import sys
|
|
|
|
from config.settings import SYNC_CONFIG
|
|
from .position_sync import PositionSync
|
|
from .order_sync import OrderSync
|
|
from .account_sync import AccountSync
|
|
|
|
class SyncManager:
|
|
"""同步管理器"""
|
|
|
|
def __init__(self):
|
|
self.is_running = True
|
|
self.sync_interval = SYNC_CONFIG['interval']
|
|
|
|
# 初始化同步器
|
|
self.syncers = []
|
|
|
|
if SYNC_CONFIG['enable_position_sync']:
|
|
self.syncers.append(PositionSync())
|
|
logger.info("启用持仓同步")
|
|
|
|
if SYNC_CONFIG['enable_order_sync']:
|
|
self.syncers.append(OrderSync())
|
|
logger.info("启用订单同步")
|
|
|
|
if SYNC_CONFIG['enable_account_sync']:
|
|
self.syncers.append(AccountSync())
|
|
logger.info("启用账户信息同步")
|
|
|
|
# 注册信号处理器
|
|
signal.signal(signal.SIGINT, self.signal_handler)
|
|
signal.signal(signal.SIGTERM, self.signal_handler)
|
|
|
|
def signal_handler(self, signum, frame):
|
|
"""信号处理器"""
|
|
logger.info(f"接收到信号 {signum},正在关闭...")
|
|
self.is_running = False
|
|
|
|
async def start(self):
|
|
"""启动同步服务"""
|
|
logger.info(f"同步服务启动,间隔 {self.sync_interval} 秒")
|
|
|
|
while self.is_running:
|
|
try:
|
|
# 执行所有同步器
|
|
tasks = [syncer.sync() for syncer in self.syncers]
|
|
await asyncio.gather(*tasks, return_exceptions=True)
|
|
|
|
logger.debug(f"同步完成,等待 {self.sync_interval} 秒")
|
|
await asyncio.sleep(self.sync_interval)
|
|
|
|
except asyncio.CancelledError:
|
|
logger.info("同步任务被取消")
|
|
break
|
|
except Exception as e:
|
|
logger.error(f"同步任务异常: {e}")
|
|
await asyncio.sleep(30) # 出错后等待30秒
|
|
|
|
async def stop(self):
|
|
"""停止同步服务"""
|
|
self.is_running = False
|
|
logger.info("同步服务停止") |