python将子进程的输出抛向黑洞

博主在使用visdom进行训练界面监控时遇到界面卡死的问题,经过排查确定问题可能与`subprocess.Popen`的`stdout`设置有关。原来使用`subprocess.PIPE`可能导致缓存堵塞,改用`subprocess.DEVNULL`将输出重定向到黑洞后,问题得到解决,确保了visdom服务的稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近使用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,"启动成功,请刷新页面后开始训练.")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值