2015-08-15 66 views
0

我在这里抓我的头,不知道这是否是正确的方式来处理它,但现在我不能想到另一种方式(开放的建议)。所以我正在运行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 

回答

0

而不是直接调用Update,为什么不叫threading.Timer(...)在主线程以及?这种方式Update将不会开始运行,直到经过30秒后,这看起来与您对布尔人所做的相同,但不会太笨重。

+0

我原本试过,它没有工作,现在它突然工作.....大声笑 – john