我正在为 Python 中的老式计算机系统编写一个模拟器,并且在退出暂停条件后尝试“重新启动”模拟器核心线程时抛出异常时遇到了一些麻烦。“运行处理器”方法是一个较大类的一部分,看起来像这样:
def run_processor(self):
processor = self
class processor_thread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.daemon = True
def run(self):
while processor.running:
#main loop for instruction fetch and decode is here
self.processor_thread = processor_thread()
self.running = True
self.processor_thread.start()
我有一个主要功能,我将内存映像加载到处理器中,设置程序计数器,并在模拟器上运行测试程序。这会将一些内容输出到控制台,最终处理器的“HLT”指令将“processor.running”设置为 False,终止 processor_thread。
这工作正常,但我遇到麻烦的是通过第二次调用 run_processor 来重新启动处理器的测试:
processor = Processor(memory, scheduler, interrupts, teleprinter)
processor.program_counter = 128
processor.run_processor()
while processor.processor_thread.isAlive():
pass
processor.program_counter = 128
processor.run_processor()
第一个实例运行良好,但是当第二次调用 run_processor 方法时,出现以下错误:
线程 Thread-3 中的异常(很可能在解释器关闭期间引发)
我该如何纠正这个问题?谢谢。
编辑:我将代码分解为基本要素,发现它实际上工作正常。我没有注意到我的 HALT 方法实际上是以关闭所有处理器外围线程的方式编写的,包括运行电传打印机模拟器的线程。如果没有电传打印机输出到它,仿真器核心似乎在第二次测试中崩溃了。
这是测试用例:
import threading
import time
class Processor(object):
def __init__(self):
self.running = False
def halt_processor(self):
self.running = False
def run_processor(self):
processor = self
class processor_thread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.daemon = True
def run(self):
while processor.running:
#main loop for instruction fetch and decode is here
print "Hello, I am the main loop doing my thing 1"
time.sleep(1)
print "Hello, I am the main loop doing my thing 2"
time.sleep(1)
print "I will halt now."
processor.halt_processor()
self.processor_thread = processor_thread()
self.running = True
self.processor_thread.start()
def test1():
processor = Processor()
processor.run_processor()
def test2():
processor = Processor()
processor.run_processor()
while processor.processor_thread.isAlive():
pass
processor.run_processor()
def main():
test2()
if __name__ == '__main__':
main()
工作正常。