You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Telegram机器人监听数据库新记录功能异常求助

问题分析与修复方案

核心问题拆解

  • 多进程全局变量不共享:multiprocessing子进程会复制父进程变量空间,main2_func中修改的PROCESS和主进程的PROCESS完全独立,导致主进程的while PROCESS:循环永远无法终止,机器人进程也不会被暂停。
  • 进程启动逻辑错误:main2_func中尝试调用p1.start(),但p1是主进程创建的Process对象,子进程无法直接访问;且一个进程对象仅能调用一次start(),重复调用会直接报错。
  • 进程控制混乱:main1_func用subprocess.Popen启动main.py,同时又通过multiprocessing启动main1_func,形成两层嵌套进程,后续无法通过p1.terminate()正确终止Telegram机器人进程。
  • 输出缓冲延迟:Python默认输出缓冲机制可能导致print('ok')内容无法即时显示,造成“仅输出一次”的错觉。

修复后的代码示例

使用multiprocessing的Event实现可靠的进程间通信,替代全局变量控制机器人的暂停与恢复:

import datetime as dt
import time as t
import main as m
import database as dat
import multiprocessing as mp

def telegram_bot(stop_event):
    # 直接调用机器人启动逻辑,避免subprocess嵌套
    m.run_bot(stop_event)

def database_monitor(stop_event):
    while True:
        print('ok')
        d = dat.data()
        current_time = int(dt.datetime.now().strftime('%y%m%d%H%M'))
        new_records = d.perev(current_time)
        
        if new_records != []:
            # 触发停止信号,暂停机器人
            stop_event.set()
            # 执行指定处理函数
            m.perevirka_1()
            t.sleep(2)
            # 清除停止信号,恢复机器人运行
            stop_event.clear()
        t.sleep(600)

if __name__ == '__main__':
    # 用Event实现进程间状态同步
    stop_bot_event = mp.Event()

    # 创建并启动进程
    bot_process = mp.Process(target=telegram_bot, args=(stop_bot_event,))
    monitor_process = mp.Process(target=database_monitor, args=(stop_bot_event,))

    monitor_process.start()
    bot_process.start()

    # 保持主进程存活,等待子进程结束
    bot_process.join()
    monitor_process.join()

配套调整说明

需要修改main.py中的机器人逻辑,让它支持监听停止信号:

# main.py中的机器人启动函数示例
def run_bot(stop_event):
    # 初始化你的Telegram机器人实例
    bot = ...
    while True:
        # 检查是否需要暂停
        if stop_event.is_set():
            t.sleep(1)
            continue
        # 正常处理消息逻辑
        bot.polling(timeout=10)

内容的提问来源于stack exchange,提问作者Максим Гера

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 18:22:41