重启(从一开始)休眠线程的最佳方法是什么?

2024-06-18 13:20:13 发布

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

我正在编写一些python代码,用于连接现实世界的硬件。它正在取代一个硬件PLC。我计划的是当一个事件触发器启动多个线程来执行某些“开”操作,然后在设置的时间间隔内进入睡眠状态,然后执行相应的“关”操作。例如:在触发器处,生成一个线程来打开房间灯光。然后睡20分钟。然后关掉灯,终止线程。你知道吗

但是,我会遇到事件触发器再次发生的情况。在这种情况下,我希望整个序列重新开始。我最初的计划是使用具有唯一名称的线程,因此如果发生触发器,请检查'lights'线程是否存在,如果确实杀死了它,然后重新生成一个新的'lights'线程。但在围绕这些部分进行研究时,似乎有人认为杀死线程是一件非常糟糕的事情。你知道吗

那么,有什么更好的方法来处理我的情况呢?请注意,在我的示例中,我只讨论了一个线程—但实际上,将有许多不同的线程控制许多不同的设备。你知道吗

这是运行raspbian的Rapberry Pi上的Python3.x,使用rpi.gpio文件监视我的输入触发器和我的输出设备的I2C中继板,以防这些信息有用。你知道吗

谢谢!你知道吗


Tags: 代码间隔硬件状态时间世界事件情况
1条回答
网友
1楼 · 发布于 2024-06-18 13:20:13

不杀掉线程的原因是这样做很容易,不会给代码任何机会来适当地“清理”。i、 例如finally块未运行、资源泄漏等

有各种各样的方法来解决这个问题,你可以按照@Jérôme的建议,在一个wait上,把超时当作一个信号来处理

asyncio是另一种选择,因为Cancelled异常往往习惯于很好地清理,并且没有与终止本机线程相关的问题

相关问题 更多 >