fix: 全部写库scanner统一加busy_timeout=30000——整点撞锁SQLite自动等待,根治崩溃
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user