在thread.timer运行之间传递值

2024-10-03 02:39:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我在这里挠头,不知道这是否是正确的方法,但到目前为止,我想不出另一种方法(开放的建议)。因此,我正在运行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

Tags: 方法runtest命令应用程序applicationdeviceupdate
1条回答
网友
1楼 · 发布于 2024-10-03 02:39:11

与其直接调用Update,为什么不在主线程中也调用threading.Timer(...)?这样Update在30秒之后才开始运行,这看起来与使用布尔函数所做的相同,但不那么笨重

相关问题 更多 >