home-assistant core 源码粗读--程序入口篇(一)

core 源码地址 : https://github.com/home-assistant/core/tree/master

core 与其他container等版本区别见: https://www.home-assistant.io/installation/

入口: homeassisstant/__main__.py     难点: faulthandler【错误记录的包,C语言编写】,   parser.add_mutually_exclusive_group()  【参数互斥组,传参的时候,组内的参数最多只允许出现一个】

L190:   safe_mode = config.safe_mode_enabled(config_dir) 这个安全模式有啥左右,没看懂~~

L192:  runner.RuntimeConfig  类使用了@dataclasses.dataclass(slots=True)  , 感觉跟继承pydantic.BaseModel的作用一样。

程序执行: exit_code = runner.run(runtime_conf)
 

跳到 runner.run所在的代码行中:homeassisstant/runner.py   L180

对asyncio内部的EventLoopPolicy, 重写asyncio的事件循环。

L185: asyncio.new_event_loop  可以全量搜索一下代码,其他非入口代码中(非测试)不再new loop,  如果使用了loop,直接使用了asyncio.get_running_loop() 【协程函数内部使用】

总协程函数的入口: L188  setup_and_run_hass

posted @ 2024-02-21 15:23  xunhanliu  阅读(24)  评论(0编辑  收藏  举报