我在这里摸不着头脑,不确定这是否是接近它的正确方法,但截至目前我无法想到另一种方式(对建议持开放态度)。所以我正在运行BACpypes库,它要求你创建一个设备,然后调用run()
来启动网络上的设备。
我要做的是每隔几分钟向设备发送一个write_property
命令,但问题是我只能在调用run()
方法后执行此操作(初始化并承载device),在我这样做之后,除了该方法之外什么都不会被调用,直到我完全停止程序,因为它是一个单线程应用程序
所以我想我会创建一个名为Update
的方法,该方法每30秒运行一次并尝试使用thread.Timer
写入设备(因为它然后在单独的线程上运行)。我遇到的问题是,在运行Update
命令之前,我用来写入设备的run()
方法无法执行,但我必须在run()之前执行我的方法否则它永远不会执行。基本上我想知道的是我可以向我的Update方法发送一个bool,这会阻止它第一次运行write_property
,以便它可以等到run()
被执行,然后每次都执行它可以尝试写入它吗?也许只需添加一个try / catch并跳过?
代码的示例:(这是我的主要尝试块)
isFirstRun = False
try:
test_device = LocalDeviceObject(...)
this_application = Application(test_device, args.ini.address)
Update(None,this_application, isFirstRun)
run()
更新方法:
def Update(client, app, isFirstRun):
threading.Timer(30.0, Update, [client,app, isFirstRun]).start()
if the run() method hasnt been called yet
skip
else if it has
execute rest of code
答案 0 :(得分:0)
为什么不在主线程中调用Update
,而不是直接调用threading.Timer(...)
?那样Update
最初才会运行,直到30秒过去,这似乎与你对布尔值的做法相同,但不那么笨重。