最近在跑实验室的时候,实验室突然断电了,当时程序是在线跑的,等到来电的时候再也跑不起来了,明明前一秒还能跑的代码,恢复供电就跑不起来了,输入命令回车之后无反应,后台也没有内存占用,刚开始以为是反应时间过长,结果吃了个饭回来还是那样,只能手动ctrl+c结束,于是开始了网上的一系列的找错排错,结果都给我解释一大堆,没有有用的办法。
下面也是一堆废话,不想看的可以直接滑倒最后。
先来解释一下这种现象,这种现象是你的进程正在处于类似于假死的状态,就是无限等待,有两种解决方法。
1、如果不着急用的话可以重新配置一个python环境,但是你所有的东西要从头再来。(当时嫌麻烦,幸好没重新配环境,因为后面我发现了一个简单粗暴的方法,hahahaha)
2、就是自己try except模块,自己捕获异常,但是这个过程有点儿麻烦,需要自己不断地去调试。(我果断放弃)
等我第二天再来尝试的时候,我发现还是那样。。。。
于是手动结束代码,这个时候我发现了问题了,我发现结束之后会有一段报错,就是下面的这种情况。
根据提供的信息问题,问题出现在_jit_compile函数的调用中。具体问题是在torch.utils/cpp_extension.py文件的第1523行,调用了baton.wait()方法。在torch.utils/file_baton.py文件的第42行,调用了time.sleep(self.wait_seconds)。
这个问题可能是由于某个线程或进程正在等待某个事件发生,但等待的时间超过了指定的等待时间。_jit_compile函数可能在编译某个扩展模块时使用了baton对象来进行同步操作,而baton.wait()方法则会阻塞当前线程直到某个条件满足或等待超时。
要解决这个问题,可以检查代码中对于baton对象的使用,确保等待的条件正确设置,并且等待时间合理。另外,还可以检查是否有其他线程或进程在操作相关资源,导致等待时间过长。
最后,最重要的解决方案在这里。
找到对应的那个cpp_etension.py文件,将调用的那个baton.wait()方法注释掉,这样程序就不会再用等待的情况了,完美解决,代码终于又跑起来了。
仅用于日常排错,有类似问题的小伙伴可以参考一下。