我正在尝试制作一个以迭代方式处理繁重计算负载的程序。我希望能够中断程序并重新启动。
我使用 Tkinter 构建了一个简单的 GUI,以允许使用“after_cancel”中断迭代循环。这在计算负载较低的测试中效果很好,但在计算负载较高的情况下,程序不会响应旨在执行“after_cancel”的按钮单击。
为简单起见,我已将程序替换为斐波那契。效果是一样的(一段时间后)。
我该如何设计它以使“停止”按钮保持响应?
这是代码:
from tkinter import *
import time
def fibonacci(n):
if n == 0:
return 0
if n == 1:
return 1
return fibonacci(n - 1) + fibonacci(n - 2)
class App:
def __init__(self, master):
self.frame = Frame(master)
self.frame.pack(expand=1, fill=BOTH)
self.master = master
self.quitter = Button(self.frame, text="Quit", fg="red", command=self.master.destroy)
self.quitter.pack(side=LEFT)
self.starter = Button(self.frame, text="Start", command=self.start)
self.starter.pack(side=LEFT)
self.stopper = Button(self.frame, text="Stop", command=self.stop)
self.stopper.pack(side=LEFT)
self.counter = 0
def start(self):
print((fibonacci(self.counter)))
self.counter += 1
self.afterid = self.master.after(1, self.start)
def stop(self):
print('Stop')
self.master.after_cancel(self.afterid)
root = Tk()
app = App(root)
root.mainloop()