我正在为一位数论家的朋友计算一堆具有特殊性质的三角形。这些三角形有无穷多,但它们需要大量的计算能力才能找到。在
我们有一个无限循环,通过不同的b,d组合运行。当程序结束时,它调用go(dict)函数导出它找到的三角形。目前,我们在开始时告诉程序运行的时间间隔。当我们意识到我们需要其他东西的计算能力时,这就造成了问题,但是程序还有几个小时要运行,我们不想失去它已经计算的三角形,而不运行go(dict)。在
理想情况下,我们需要一些用户输入,以使程序中断循环,在内存中使用当前版本的字典运行go(dict),然后退出。尝试atexit.register公司(go,dict)不成功,因为它在循环中被调用多次,并在程序终止时运行多次。在
(参见下面的缩写循环代码)
interval = eval(input("How many hours shall I run for? "))*3600
starttime = time.time()
dict = {}
b = start_value
while True:
for d in range (1, b):
compute stuff
if (condition):
add triangle to dict
if (time.time()-starttime)>interval:
go(dict)
return
b +=1
这就是异常
是的用途:按Ctrl+C来中断进程,代码通过保存结果来处理它:请注意,您不能
return
来自独立循环,但是您可以从它break
。在您可以做的一件事是使用
except KeyboardInterrupt:
接管ctrl+c,当您向脚本发送一个中断时,它将运行这个块,您可以在其中放置代码以干净地退出 下面是一个例子:使用信号:
现在,当我们点击
ctrl+c
时,我们将interrupted
设置为True
,它运行go(dict)
,并打破循环。在相关问题 更多 >
编程相关推荐