我在這裏抓我的頭,不知道這是否是正確的方式來處理它,但現在我不能想到另一種方式(開放的建議)。所以我正在運行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