fix: 全部写库scanner统一加busy_timeout=30000——整点撞锁SQLite自动等待,根治崩溃

This commit is contained in:
xxm
2026-08-18 10:00:19 +08:00
parent e18cf7e76e
commit 0070141bce
6 changed files with 23 additions and 0 deletions
@@ -91,6 +91,7 @@ def load_market_state():
# 补 adx/above_ma20
try:
conn = sqlite3.connect(str(DB_PATH), timeout=5)
conn.execute("PRAGMA busy_timeout=30000") # 2026-08-18 整点撞锁等待
row = conn.execute(
"SELECT date, above_ma20, adx, regime FROM market_regime "
"WHERE market='a' ORDER BY date DESC LIMIT 1").fetchone()
@@ -106,6 +107,7 @@ def load_market_state():
# 回退原始
try:
conn = sqlite3.connect(str(DB_PATH), timeout=5)
conn.execute("PRAGMA busy_timeout=30000") # 2026-08-18 整点撞锁等待
row = conn.execute(
"SELECT date, above_ma20, adx, regime FROM market_regime "
"WHERE market='a' ORDER BY date DESC LIMIT 1").fetchone()
@@ -122,6 +124,7 @@ def compute_market_filters():
不再 fetch_tx_klines 自己拉指数K线算——使用层只读数据不采集,口径与回测一致)"""
try:
conn = sqlite3.connect(str(DB_PATH), timeout=5)
conn.execute("PRAGMA busy_timeout=30000") # 2026-08-18 整点撞锁等待
row = conn.execute(
"SELECT mkt_rsi, mkt_dd60, mkt_down_days FROM market_indicators WHERE market='a' ORDER BY date DESC LIMIT 1"
).fetchone()
@@ -174,6 +177,7 @@ def fetch_fundamentals(code):
"""从 stock_fundamentals 表读 mcap_q/pe_q(分位由调用方算)"""
try:
conn = sqlite3.connect(str(DB_PATH), timeout=5)
conn.execute("PRAGMA busy_timeout=30000") # 2026-08-18 整点撞锁等待
row = conn.execute(
"SELECT pe, mcap_total FROM stock_fundamentals WHERE code=?", (code,)).fetchone()
conn.close()
@@ -222,6 +226,7 @@ def main():
# 3. 逐只检查
conn = sqlite3.connect(str(DB_PATH), timeout=10)
conn.execute("PRAGMA busy_timeout=30000") # 2026-08-18 整点撞锁等待
hits = 0
for code in all_stocks:
# 当日幂等:今天已写入则跳过
@@ -271,6 +276,7 @@ def get_market_percentile(code, field):
返回 None 表示数据不可用。"""
try:
conn = sqlite3.connect(str(DB_PATH), timeout=5)
conn.execute("PRAGMA busy_timeout=30000") # 2026-08-18 整点撞锁等待
# 全市场分布
total = conn.execute(f"SELECT COUNT(*) FROM stock_fundamentals WHERE {field} > 0").fetchone()[0]
if not total:
@@ -295,6 +301,7 @@ def fetch_sector_momentum(code):
sector_index_builder 加工层产物)算20日涨跌。返回 None 表示无行业数据。"""
try:
conn = sqlite3.connect(str(DB_PATH), timeout=5)
conn.execute("PRAGMA busy_timeout=30000") # 2026-08-18 整点撞锁等待
sector = conn.execute(
"SELECT sector FROM stock_sectors_em WHERE code=? LIMIT 1", (code,)).fetchone()
if not sector or not sector[0]:
@@ -321,6 +328,7 @@ def fetch_news_count(code):
"""简化:查 stock_news 表近3日新闻数(部署时可完善)"""
try:
conn = sqlite3.connect(str(DB_PATH), timeout=5)
conn.execute("PRAGMA busy_timeout=30000") # 2026-08-18 整点撞锁等待
row = conn.execute(
"SELECT COUNT(*) FROM stock_news WHERE code=? AND date >= datetime('now','-3 days')",
(code,)).fetchone()