最近使用visdom做训练用的界面, 结果发现, 启动服务后一段时间后训练界面总是会无缘无故的卡在某个地方.
后来我用命令行启动的时候却又是好的. 非常的奇怪. 后来我判断应该是跟 subprocess.Popen 有关系.
猜测可能跟stdout有关系, 有可能是PIPE 的缓存塞满了, 所以就卡住了.
后来调试了一下源代码发现 还有 subprocess.DEVNULL 可以输出到控. 然后果断换上了. 然后就正常可以使用了.
subprocess.STDOUT
subprocess.PIPE
subprocess.DEVNULL
visdompro = None
@GloabelRouter.route(method='post', url='/api/TrainPytorchDeeplabV3/StartVisDom', auth=False)
def StartVisDom(handler):
global visdompro
cmd = [
"python.exe",
"-m",
"visdom.server",
"-p", "11251"
]
if(visdompro != None):
os.kill(visdompro.pid,9)
# os.system(" ".join(cmd))
visdompro = subprocess.Popen(
# visdompro = os.popen(
cmd,
shell = True,
bufsize = 0,
stdout=subprocess.DEVNULL, # 这句话之前是 subprocess.PIPE 会阻塞进程
stderr=subprocess.DEVNULL, # 这句话之前是 subprocess.PIPE 会阻塞进程
)
OutMessage(handler,True,"启动成功,请刷新页面后开始训练.")