add
This commit is contained in:
66
sync/manager.py
Normal file
66
sync/manager.py
Normal file
@@ -0,0 +1,66 @@
|
||||
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("同步服务停止")
|
||||
Reference in New Issue
Block a user