如何在不停止循环的情况下输入运行中的Python Tornado IOLoop并执行一次功能

时间:2019-05-10 14:36:37

标签: python tornado

我有一个龙卷风IOLoop,它每500毫秒运行一次,从传感器接收数据并将其写入SQL数据库。我有一个函数,希望在单独的python脚本中更改传感器的参数之一。如何在不停止从传感器到SQL数据库的IOLoop的情况下,从其他python脚本一次执行此功能。

如果我在自己的脚本中的另一个PeriodicCallback中运行该函数,则可以更改传感器的参数。但是我真的不想再次使用PeriodicCallback和IOLoop,因为那样会一遍又一遍地运行该函数。另外,如果我使用PeriodicCallback,则只能更改一次参数,因为它一直在运行。不确定如何仅输入IOLoop并执行一次功能以更改传感器的参数。

下面是将传感器的状态写入SQL数据库并且运行良好的代码。

def on_response(response):
    """This function gets run whenever a device responds. write is another function that writes to the SQL database"""

    write(response)   


def loop():
    """This function will be called in an infinite loop by tornado."""
    flowMKS.get(on_response)



if __name__ == "__main__":

    #define what flow controller you want to get data from  
    flowMKS = FlowController("ip_address")

    #PeriodicCallback which calls the status every 500 ms as default 
    PeriodicCallback(loop, 500).start()
    IOLoop.current().start()

这是我尝试编写的另一个python脚本,以更改传感器的速率。

from mfc import FlowController
from tornado.ioloop import IOLoop, PeriodicCallback




def main():
    flowMKS.set(55.2)



if __name__ == "__main__":

    #define what flow controller you want to get data from  
    flowMKS = FlowController("IP)



    #PeriodicCallback which calls the status every 500 ms as default 
    PeriodicCallback(main, 500).start()


    IOLoop.current().start()

当我在第二个python脚本中使用PeriodicCallback时,它可以工作,但一开始只能更改一次flowMKS.set()的值。我也尝试过run_sync函数,但是它将停止另一个IOLoop到SQL数据库。 最终结果将是运行第一个python脚本,将传感器的状态写入SQL数据库。然后根据需要运行第二个脚本以更改传感器速率,而不会中断第一个python脚本写入数据库的操作。如果将来我想再次更改传感器的速度,我将不止一次运行第二个脚本。

0 个答案:

没有答案