fix: 修复 _email_poller 线程静默死亡问题
- IMAP 连接加 30s socket timeout,防止 _send_id_command 等操作永久阻塞 - _email_poller 加顶层 try/except,异常后 sleep 5s 继续循环 - @retry() 加指数退避延迟(1s,2s,4s...),避免重试风暴
This commit is contained in:
18
main.py
18
main.py
@@ -45,13 +45,17 @@ def _signal_handler(signum, frame):
|
||||
def _email_poller(cfg):
|
||||
logger.info("邮件轮询线程已启动")
|
||||
while _running:
|
||||
for acct_idx, mail in poll_accounts(cfg):
|
||||
if not _running:
|
||||
return
|
||||
with _pending_lock:
|
||||
if mail.uid not in _pending_uids:
|
||||
_pending_uids.add(mail.uid)
|
||||
_email_queue.put((acct_idx, mail))
|
||||
try:
|
||||
for acct_idx, mail in poll_accounts(cfg):
|
||||
if not _running:
|
||||
return
|
||||
with _pending_lock:
|
||||
if mail.uid not in _pending_uids:
|
||||
_pending_uids.add(mail.uid)
|
||||
_email_queue.put((acct_idx, mail))
|
||||
except Exception as e:
|
||||
logger.error(f"邮件轮询线程异常: {e}", exc_info=True)
|
||||
time.sleep(5)
|
||||
if _running:
|
||||
for _ in range(cfg.polling.interval_seconds):
|
||||
if not _running:
|
||||
|
||||
Reference in New Issue
Block a user