Python 任何类似于微控制器中断处理器的东西?
是否有某种方法可以使用try语句捕获由raise语句引起的错误,执行代码来处理标志,例如更新一些变量,然后返回到标志被提升时代码运行的行 我特别想到的是一个微控制器的中断处理程序(它实现了我刚才描述的功能) 我正在编写一些代码,其中有一个线程检查一个文件,看它是否更新,我希望它中断主程序,以便它知道更新,适当地处理它,并返回到中断时正在运行的行 理想情况下,主程序将识别来自线程的标志,而不管它在何处执行。try语句可以做到这一点,但我如何才能返回到国旗升起的那一行 谢谢! 保罗 编辑: 我在评论后尝试ISR,尽管这看起来像是一个使用锁的简单例子。底部的小测试例程用于演示代码Python 任何类似于微控制器中断处理器的东西?,python,Python,是否有某种方法可以使用try语句捕获由raise语句引起的错误,执行代码来处理标志,例如更新一些变量,然后返回到标志被提升时代码运行的行 我特别想到的是一个微控制器的中断处理程序(它实现了我刚才描述的功能) 我正在编写一些代码,其中有一个线程检查一个文件,看它是否更新,我希望它中断主程序,以便它知道更新,适当地处理它,并返回到中断时正在运行的行 理想情况下,主程序将识别来自线程的标志,而不管它在何处执行。try语句可以做到这一点,但我如何才能返回到国旗升起的那一行 谢谢! 保罗 编辑: 我在评论
import os
import threading
import time
def isr(path, interrupt):
prev_mod = os.stat(path).st_mtime
while(1):
new_mod = os.stat(path).st_mtime
if new_mod != prev_mod:
print "Updates! Waiting to begin"
# Prevent enter into critical code and updating
# While the critical code is running.
with interrupt:
print "Starting updates"
prev_mod = new_mod
print "Fished updating"
else:
print "No updates"
time.sleep(1)
def func2(interrupt):
while(1):
with interrupt: # Prevent updates while running critical code
# Execute critical code
print "Running Crit Code"
time.sleep(5)
print "Finished Crit Code"
# Do other things
interrupt = threading.Lock()
path = "testfil.txt"
t1 = threading.Thread(target = isr, args = (path, interrupt))
t2 = threading.Thread(target = func2, args = (interrupt,))
t1.start()
t2.start()
# Create and "Update" to the file
time.sleep(12)
chngfile = open("testfil.txt","w")
chngfile.write("changing the file")
chngfile.close()
time.sleep(10)
处理中断的一种标准操作系统方法是将中断排队,以便另一个内核线程可以处理它 这部分适用于Python 我正在编写一些代码,其中有一个线程检查一个文件,看它是否更新,我希望它中断主程序,以便它知道更新,适当地处理它,并返回到中断时正在运行的行 您有多个线程。你不需要“中断”主程序。在单独的线程中简单地“适当地处理它”。当另一个线程“适当地处理了它”时,主线程将找到更新 这就是为什么我们有锁。确保已正确更新共享状态 通过锁定线程所需的资源来中断线程
您可以通过获取资源上的锁来中断线程。在python中,我们称这种模式为“函数调用”。你不能例外地这样做;异常仅展开堆栈,并始终指向第一个封闭的
except
子句
微控制器具有支持异步事件的中断;但同样的机制也用于系统调用的软件中断,因为可以将中断配置为具有不同的保护位集;可以允许系统调用执行比调用它的用户程序更多的操作。Python没有这样的保护级别,因此软件中断在这里没有多大用处
至于处理异步事件,您可以在python中使用该模块,但如果您也使用线程,您可能希望轻举妄动。让主线程处理异步事件,而不是让其他线程(可能是专用线程)处理异步事件,这有什么意义呢?我不认为可以在其他线程中处理异步事件,我只是从我思考的角度,即编码微控制器的角度来表述这个问题。我的示例代码与您提到的完全相同,它与ISR的精神并不完全相同,因为它在等待锁定时阻止行执行,而不是在任何时候中断并在完成时返回该行。我做了一段非常基本的代码,可以根据你的建议做我想要的。谢谢你的帮助@保罗:小心你如何描述硬件/操作系统中断。虽然硬件中断原则上是可恢复的,但没有操作系统允许在不检查调度程序并确定哪个线程是最高优先级的情况下恢复。