我在这里挠头,不知道这是否是正确的方法,但到目前为止,我想不出另一种方法(开放的建议)。因此,我正在运行BACpypes库,它要求您创建一个设备,然后调用run()
应用程序来启动网络上的设备
我要做的是每隔几分钟向设备发送一个write_property
命令,但问题是我只能在调用run()
方法(该方法初始化并托管设备)之后才能这样做,一旦我这样做,除了该方法之外的任何东西都不会被调用,直到我完全停止程序,因为它是单线程应用程序
所以我想我应该创建一个名为Update
的方法,它将每30秒运行一次,并尝试使用thread.Timer
写入设备(因为它在一个单独的线程上运行)。我遇到的问题是,在运行run()
命令之前,我用来写入设备的Update
方法无法执行,但我必须在run()命令之前执行我的方法,否则它永远不会执行。基本上我想知道的是,我是否可以向我的Update方法发送一个bool来阻止它第一次运行write_property
,这样它就可以等到run()
被执行之后,然后每次都可以尝试写入它?也许只是添加一个try/catch和skip
代码外观示例:(这是我的主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
与其直接调用
Update
,为什么不在主线程中也调用threading.Timer(...)
?这样Update
在30秒之后才开始运行,这看起来与使用布尔函数所做的相同,但不那么笨重相关问题 更多 >
编程相关推荐