下面的python脚本使用从Ruuvi标记读取温度。在同步Ruuvi回调中,我们希望调用一个异步的方法(发送消息到输出)。以下代码将在第二次调用时引发异常
RuntimeError: Event loop is closed
我怎样才能使数据多次工作
import asyncio
from azure.iot.device.aio import IoTHubModuleClient
from ruuvitag_sensor.ruuvi import RuuviTagSensor
async def main():
device_client = IoTHubModuleClient.create_from_edge_environment()
await device_client.connect()
def handle_data(found_data):
asyncio.get_event_loop().run_until_complete(device_client.send_message_to_output("some data", "ruuvi"))
while True:
RuuviTagSensor.get_datas(handle_data)
time.sleep(5)
await device_client.disconnect()
if __name__ == "__main__":
asyncio.run(main())
根据您的例外情况,由于某种原因,循环似乎是闭合的。 我认为这是由于
run_until_complete
函数中的handle_data
导致了关闭循环的反应因此,我建议尝试以下方法:
替代(更复杂的)解决方案可以使用从队列读取并调用
send_message_to_output
函数的函数:这里的想法是将
handle_data
与send_msg
分开。 通过这种方式,我设法使send_msg
成为一个异步函数,现在不需要创建loop
或Task
相关问题 更多 >
编程相关推荐