吐槽一下 windows 的终端的一个天坑

查看 120|回复 8
作者:vituralfuture   
一个 django 开发的后端,因为是学校里的学长组织的项目,所以给了一个他们实验室里的一台 windows 作为服务器,平时远程上去用。最近有一个接口account/check经常卡死,具体情况就是
  • 不断开连接,但一直没有响应
  • 浏览器可能有超时自动断开,curl命令不会断开,所以会一直卡死

    其他接口都正常
    我上服务器上排查了一下,发现了一个天坑
    cmd 窗口在选中模式下,account/check会卡死,其他接口正常但是终端没有输出( django 处于调试或者开发模式,每请求一次都打印在终端)
    去网上查了一下,找到了这个
    https://stackoverflow.com/questions/33883530/why-is-my-command-prompt-freezing-on-windows-10
    虽然不知道为什么只有account/check会出现这个问题,不过可以确定这个选择模式真是一个大聪明
    网上找到的解决方案是:关闭 Quick Edit Mode
    但我觉得这还是不太方便。如果这种大聪明功能一多,岂不是拿到一台新的 windows 机器还要设置一堆东西?我觉得可能是使用终端的方式错了,v 友们有没有遇到这个问题?都是怎么解决的?

    account, check, django, 天坑

  • Worldispow   
    你程序咋启动的,没跑在后台吗?
    即便是 linux ,程序也要跑到后台啊。。。
    vituralfuture
    OP
      
    补充一下,上面的链接的内容就是,当 cmd 窗口处于选中模式下时,进程会被 halt (原文是这个词,我猜是阻塞的意思),直到进程尝试往终端打印。
    我测试出的情况就是,当窗口处于选择模式下,终端没有任何的输出。然后随便点击一下窗口,退出选择模式,终端 会一口气输出之前被卡住的所有信息。
    我在项目里是负责前端的,给后端同学反映这个问题,他并没有发现问题的原因,只是点击了一下窗口发现莫名其妙好了,然后 django 输出了一个错误`Broken Pipe`,然后他以为是这个原因。很显然这不是根本原因,因为浏览器超时自动断开了连接,然而这个接口恢复执行后拿到了一个另一方已经断开连接的管道,自然就会出现`Broken Pipe`
    vituralfuture
    OP
      
    @Worldispow 负责后端的同学打开了一个 cmd 窗口,然后执行`python manage.py runserver 0.0.0.0:8080`
    我对 windows 也不太了解,不过刚刚看后端的同学似乎在尝试用 windows 的 IIS 。
    如果我用 linux 的话,我应该是`nohup python xxxx &`
    cwcc   
    这个问题应该是 conhost 本身的默认配置导致的。因为有时候确实会不小心点一下窗口内,然后出现个白色的光标,程序就被卡住了。最简单的办法就是不用 conhost 作为持久化程序运行的本体,使用 WT 或者别的守护方式,服务什么的也行。
    vituralfuture
    OP
      
    @vituralfuture #3 本科生参加的很多项目基本都是灌水,菜,见谅
    maggch97   
    遇到不能理解的问题先想想为什么会这样设计,而不是在什么都不会的时候这也吐槽那也吐槽。
    Hellert   
    这种控制台的最好是用 WinSW 把所有开机启动的程序安装为服务,它同时会将控制台输出保存为文件,方便你查看。
    我印象中 conhost 还有一个问题,就是如果你按住鼠标拖动控制台窗口,你的程序也会暂停运行。具体我记不清了,现在现在基本用 Windows Terminal 了。
    zenghx   
    这不是 cmd 祖传的设定吗
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部