Python 如何在执行过程中停止for循环
我目前正在运行一个程序,我希望它能持续一两个小时。我现在需要打破循环,这样程序的其余部分才能继续 这是代码的一部分:Python 如何在执行过程中停止for循环,python,python-idle,Python,Python Idle,我目前正在运行一个程序,我希望它能持续一两个小时。我现在需要打破循环,这样程序的其余部分才能继续 这是代码的一部分: from nltk.corpus import brown from nltk import word_tokenize, sent_tokenize from operator import itemgetter sentences = [] try: for i in range(0,55000): try: sentence
from nltk.corpus import brown
from nltk import word_tokenize, sent_tokenize
from operator import itemgetter
sentences = []
try:
for i in range(0,55000):
try:
sentences.append(brown.sents()[i])
print i
except:
break
except:
pass
目前该环路约为30000个。我想退出并继续代码(此处未显示)。请建议我如何这样做,程序不会完全中断退出。(与键盘中断不同)我认为您也可以将for循环放在try块中,通过继续程序的其余部分来捕获键盘中断异常。使用这种方法,您应该能够通过在程序内部按ctrl+C来打破循环。代码看起来与此类似:
try:
# your for loop
except KeyboardInterrupt:
print "interrupted"
# rest of your program
可以在执行break命令之前使用pickle保存数据。下次加载数据并继续循环。因为它已经在运行,所以不能修改代码。除非在
pdb
下调用它,否则无法进入Python调试器来更改条件以离开循环并继续程序的其余部分。所以没有一条正常的途径对你开放
有一个外部解决方案,需要熟悉Python解释器和运行时。您可以将gdb
调试器附加到Python进程(如果您在Windows上,也可以附加VisualStudio)。然后,当您进入时,检查主线程的堆栈跟踪。您将看到一系列嵌套的PyEval.*
调用等等。如果您能找出循环在堆栈跟踪中的位置,那么就识别循环。然后您需要找到计数器变量(一个包裹在PyObject
中的整数),并将其设置为足够大的值以触发循环结束,然后让流程继续。不适合胆小的人!这里有更多信息:
KeyboardInterrupt
异常中断(正如@fedormirnov所建议的),然后重新开始。你将失去你已经投入的处理时间,但认为这是一个沉没的成本。
关于如何向程序添加支持以调试正在运行的进程,这里有很多有用的信息:
nohup python script.py>output.txt&
,但程序已经运行了一半。我现在无法在空闲状态下键入命令。我怎么能只打破循环呢。这就是我所需要的。