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

Flask集成pyudev USB监控线程未启动问题求助

问题排查与修复方案

核心问题拆解

  • Flask Debug模式的双进程坑:开启debug=True时,Flask会启动主进程+重载子进程,你的USB线程仅在主进程中启动,但实际处理请求的是子进程,而子进程不会执行if __name__ == "__main__"块内的代码,导致监控功能未生效,自然看不到终端输出。
  • 冗余死循环阻塞:pyudev.MonitorObserver本身就是后台线程,你添加的while True: pass会将监控线程所在的线程卡死,属于完全多余的代码。
  • Windows环境硬限制:pyudev依赖Linux的udev系统,Windows原生不支持该库,因此在Windows环境下USB监控功能无法正常工作。

修复步骤

1. 解决Flask双进程冲突

要么直接关闭Debug模式,要么保留Debug但禁用自动重载:

if __name__ == "__main__":
    # 将线程设为守护线程,Flask退出时自动终止
    usb_thread = threading.Thread(target=monitor_usb, daemon=True)
    usb_thread.start()

    # 禁用自动重载的Debug模式,避免双进程问题
    app.run(debug=True, use_reloader=False)

2. 移除冗余死循环

修改monitor_usb函数,删除无用的死循环,用observer.join()维持线程正常运行:

def monitor_usb():
    context = pyudev.Context()
        
    monitor = pyudev.Monitor.from_netlink(context)
    monitor.filter_by('usb')

    monitor.enable_receiving()

    print("Waiting for USB devices...")

    observer = pyudev.MonitorObserver(monitor, device_event_monitor)
    observer.start()

    # 等待Observer线程运行,避免线程直接退出
    observer.join()

3. Windows环境替代方案

Windows下无法使用pyudev,建议替换为Windows原生支持的USB监控库,比如pyusb或pywin32,通过这些库实现设备枚举与状态监听。


验证方法

在Linux/Codespace环境下运行修改后的代码,终端应正常输出Waiting for USB devices...;插拔USB设备时,检查数据库是否有对应数据写入;同时确认Flask网页可正常访问。

内容的提问来源于stack exchange,提问作者Filippo Romagnolo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 01:23:12