From 9ab64aea539a7e1e6d9ca81edb10fc4151564b15 Mon Sep 17 00:00:00 2001 From: silencesdg Date: Fri, 22 May 2026 10:19:47 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E9=A2=91=E7=8E=87?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E6=AF=8F20=E5=88=86=E9=92=9F+=E5=8D=95?= =?UTF-8?q?=E5=AE=9E=E4=BE=8B=E9=94=81=E9=98=B2=E6=92=9E=E8=BD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + scripts/daily_optimize.py | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/.gitignore b/.gitignore index 652d250..3ce5d29 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ optimization_results_*.json .ea.lock .hermes/ realtime_trades_* +.optimizer.lock diff --git a/scripts/daily_optimize.py b/scripts/daily_optimize.py index f5f3a41..fa78cd2 100755 --- a/scripts/daily_optimize.py +++ b/scripts/daily_optimize.py @@ -267,6 +267,17 @@ def restart_ea(): def main(): + # ★ 单实例锁:防止 cron 每20分钟时上一轮还没跑完 + import fcntl + lock_path = PROJECT_DIR / ".optimizer.lock" + lock_fd = os.open(str(lock_path), os.O_CREAT | os.O_RDWR, 0o644) + try: + fcntl.flock(lock_fd, fcntl.LOCK_EX | fcntl.LOCK_NB) + except BlockingIOError: + logger.warning("⚠️ 上一轮优化仍在运行,跳过本轮") + os.close(lock_fd) + return 0 + logger.info("=" * 60) logger.info("📅 每日自动优化启动") logger.info(f"时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")