我有一个龙卷风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脚本写入数据库的操作。如果将来我想再次更改传感器的速度,我将不止一次运行第二个脚本。