三个项目代码更新手术+为什么
手术A - 用python去做多线程并发处理-可能会遇到的问题
Q3: 谁来充当“超时杀手”?
现状:默认情况下,Python 的 subprocess.run(cmd) 是阻塞的。它会一直傻傻地等外部命令结束。
灾难场景:假设 Docker 里的 ADB 卡死了(假死),既不报错也不退出。你的 Python 线程就会永远卡在那一行。如果你的线程池有 5 个线程,5 个都卡死了,你的调度器就彻底瘫痪了。
解决方案:Timeout (超时自杀)。
你必须给 subprocess.run 传入 timeout=600 (10分钟)。
一旦超时,Python 会抛出 TimeoutExpired 异常,你捕获这个异常,然后手动 Kill 掉那个卡死的 Docker 进程。
这就是“自愈”的核心逻辑。
Q4: 如何防止“一机多控”?
解决方案:在调度器的入口处,必须做去重。
最简单的办法:devices = list(set(devices))。
把 ['A', 'A', 'B'] 变成 ['A', 'B']。
或者在类里面维护一个 active_devices 集合,提交任务前检查 if serial in self.active_devices: raise Error。

浙公网安备 33010602011771号