防止中断例程运行多个实例

2024-05-29 03:49:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我用python和Raspian在树莓派。我有一个外设,它使我的中断处理程序功能运行。有时,当对第一个中断的响应尚未完成时,中断被触发。所以我添加了一个变量,它在中断函数进入时设置,在退出时重置,如果进入函数后,它发现锁已设置,它将立即退出。在

有没有更规范的方法来处理这种事情。在

def IrqHandler(self, channel):
    if self.lockout: return
    self.lockout = True;
    # do stuff
    self.lockout = False;

Tags: 方法函数self功能规范处理程序ifdef
2条回答

你可以用博格模式来搭配。这样你就可以有几个中断实例关注一个状态。 还有一个叫做单例的,但这里有一个关于这两个的讨论。 Why is the Borg pattern better than the Singleton pattern in Python

如果两次调用IrqHandler足够近的距离,则存在竞争条件,两个调用都可以将self.lockout视为False,并继续将其设置为True

threading模块有一个Lock()对象。通常(默认)这是用来阻止线程直到释放锁。这意味着所有中断都将排队并轮流运行处理程序。在

您还可以创建一个Lock(False),如果已经获得锁,它将只返回False。这是你的近处

from threading import Lock

def __init__(self):
    self.irq_lock = Lock(False)

def IrqHandler(self, channel):
    if not self.irq_lock.acquire():
        return
    # do stuff
    self.irq_local.release()

相关问题 更多 >

    热门问题