Python程序在命令行中停止运行

12 投票
2 回答
9087 浏览
提问于 2025-04-18 12:06

我在网上查了很多关于在VMware上用Python遇到的问题,但没找到解决我问题的信息。

我的问题是,Python程序会卡住,虽然进程还在运行,但它不使用CPU,内存使用情况也没有变化。程序没有抛出任何异常,或者其他什么信息……它就这样卡住了,永远不会恢复执行。看起来这个问题是随机发生的,并不是因为我的机器没有内存,因为在同一时间我可以在另一个会话中正常执行。

我的机器是虚拟机,配置是:Windows Server 2008 64位,VMware Tools 9.4.5。

我尝试过的Python版本有:2.7、3.3和3.4。

我的示例脚本是:(但不仅仅是这个脚本会卡住)

print("START")
for i in range(0, 1000): 
  print("step: " + str(i)) 
  file = open("./test_file.csv", "r") #file size is 1.2GB but I have 10GB RAM
  for line in file.readlines(): 
    pass    
  file.close() #close the file
print("END")

示例输出是:

START
step 0
step 1
step 2
step 3
step 4

然后程序就卡住了,卡住的步骤是随机的(有时是第4步、第15步、第34步……)。我能做的就是杀掉这个进程,然后再重新运行。在执行过程中,我可以看到程序反复使用1到2GB的内存,然后释放……使用和释放。卡住总是在释放内存后发生,从那时起,内存使用保持稳定,而这个进程的CPU使用率是0%。

我在IDLE中运行这个脚本,想用调试器和堆栈查看器来调试,但当程序卡住时,整个IDLE也不响应。

我还在其他非虚拟机上尝试过,那里没有问题。

如果有任何建议,关于如何解决或调试这类问题,我将非常感激。

2 个回答

0

你可能应该使用 readline(),而不是 readlines(),因为后者会把整个文件都读进来。

27

我解决了这个问题,问题不在于Python或VMware,而是我对微软产品的了解不够。

我没有提到我是在Windows命令行下运行Python脚本的,而“卡住”的原因其实是cmd命令行本身。我之前不知道如果你在命令行中选中某些东西,cmd会暂停正在执行的任务。

在这个虚拟机上,我开启了“快速编辑模式”。你可以按照以下步骤来更改这个设置:右键点击cmd窗口 -> 属性 -> 选项标签 -> “快速编辑模式”部分。

在这个模式下,如果你点击命令行,它会选中一些内容,然后...就会暂停正在执行的任务……我关闭了“快速编辑模式”,程序就正常运行了。

没有快速编辑模式的话,你点击命令行是无法选中任何东西的。

我知道……我应该为自己感到羞愧……我确实感到羞愧。

撰写回答