diff --git a/app_web.py b/app_web.py index 61260d0..5bc4297 100644 --- a/app_web.py +++ b/app_web.py @@ -624,8 +624,9 @@ def compute_storage_stats(base: Path, days: int, keyword_list: Tuple[str, ...]) kw_params = [f"%{k}%" for k in keyword_list] for channel_id, path in dbs: - conn = sqlite3.connect(str(path)) + conn = sqlite3.connect(str(path), timeout=60.0) try: + conn.execute("PRAGMA busy_timeout=60000") cur_sql = conn.cursor() cur_sql.execute("SELECT COUNT(*) FROM messages") total_all_time += int(cur_sql.fetchone()[0]) diff --git a/telegram-scraper.py b/telegram-scraper.py index d40c665..91f8496 100644 --- a/telegram-scraper.py +++ b/telegram-scraper.py @@ -438,7 +438,9 @@ class OptimizedTelegramScraper: channel_dir.mkdir(exist_ok=True) db_file = channel_dir / f'{channel}.db' - conn = sqlite3.connect(str(db_file), check_same_thread=False) + # 多频道轮询写入时适当延长等待,减轻与其它进程/备份工具短暂抢锁时的 OperationalError + conn = sqlite3.connect(str(db_file), check_same_thread=False, timeout=60.0) + conn.execute("PRAGMA busy_timeout=60000") conn.execute('''CREATE TABLE IF NOT EXISTS messages (id INTEGER PRIMARY KEY, message_id INTEGER UNIQUE, date TEXT, sender_id INTEGER, first_name TEXT, last_name TEXT, username TEXT,