在thread.timer之间传递值

时间:2015-08-15 18:26:47

标签: python multithreading timer

我在这里摸不着头脑,不确定这是否是接近它的正确方法,但截至目前我无法想到另一种方式(对建议持开放态度)。所以我正在运行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

1 个答案:

答案 0 :(得分:0)

为什么不在主线程中调用Update,而不是直接调用threading.Timer(...)?那样Update最初才会运行,直到30秒过去,这似乎与你对布尔值的做法相同,但不那么笨重。