文章目录
前言
之前我们写了一篇文章在低性能机器上启动langchain-chatchat,我们通过debug看看在这种模式下是如何调用qwen-pai模型的,顺便一起来了解下langchain-chatchat的启动流程
https://blog.youkuaiyun.com/kljyrx/article/details/138218738
一、配置
我们这里debug的程序的model_config配置是按照这篇文档配置的
https://blog.youkuaiyun.com/kljyrx/article/details/138218738
二、debug流程
1.入口
当我们执行python startup.py -a --lite
的时候,实际上第一步就是执行了这里。
大概意思是先判断python版本是否小于3.10,然后决定使用哪个函数来开启异步事件
然后调用 start_main_server 函数
2.start_main_server函数
2.1 创建多进程并开始参数解析和拼装
这段代码涉及 Python 中的多进程处理。
mp.set_start_method("spawn")
:这一行代码设置了多进程启动的方式为 “spawn”。这意味着在创建新的进程时,将会使用子进程来执行。“spawn” 是 Python 中的一个启动方法,它会在创建新进程时启动一个新的 Python 解释器进程,然后在该进程中执行指定的代码。这通常用于避免在创建新进程时出现一些与共享资源相关的问题。
manager = mp.Manager()
:这一行代码创建了一个 multiprocessing.Manager 对象,用于创建共享的对象,如共享的列表、字典等。在多进程编程中,由于每个进程都有自己独立的内存空间,无法直接共享数据。使用 Manager 对象可以在多个进程之间共享数据,从而实现进程间的通信和同步。
2.2 进入parse_args函数
这个函数就是帮我们初始化参数的过程。每一个parser.add_argument 都是在建立一个参数,并给初始值。
以下面这段为例,它的意思是 添加一个参数–all-webui,如果启动命令里有 -a的话那 --all-webui 的值是 true,反之是false。在这个函数的最后一行args = parser.parse_args()
会读取这个参数和参数值。执行下面这句话,我们就可以通过args.all_webui 得到这个参数的值(来自dest)
parser.add_argument(
"-a",
"--all