我在这里抓我的头,不知道这是否是正确的方式来处理它,但现在我不能想到另一种方式(开放的建议)。所以我正在运行BACpypes库,它需要您创建一个设备,然后应用程序调用run()
,它启动网络上的设备。thread.timer运行之间传递值
我想要做的是每隔几分钟发送一次write_property
命令到设备,但问题是我只能在我调用run()
方法(初始化并托管设备)后才能这样做,只要我这样做,没有什么超越该方法被调用,直到我完全停止该程序,因为它是一个单线程应用程序
所以我想创建一个名为Update
的方法,它将每隔30秒运行一次,然后尝试写入设备thread.Timer
(因为它然后运行在一个单独的线程上)。我遇到的问题是我用来写入设备的Update
方法在运行run()
命令之前无法执行,但我必须在run()命令之前执行我的方法,否则它将永远不会执行。基本上我想知道的是我可以发送一个布尔到我的更新方法,这将阻止它第一次运行write_property
,以便它可以等到run()
已被执行,然后每次都可以尝试写入它?也许只是添加一个try/catch并跳过?
例如:(这是我的主要try块)
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
我原本试过,它没有工作,现在它突然工作.....大声笑 – john