自我介绍
作为一位前端开发者,我目前的技能集中在Vue上。然而,为了拓宽自己的知识领域和提高技术能力,我决定从零开始挑战一个月手写copy个小型的Stable Diffusion
开始解析入口文件 webui.py
第一段代码
import logging
logging.getLogger("xformers").addFilter(lambda record: 'A matching Triton is not available' not in record.getMessage())
知识点
logging 库
Logging 是 Python 的内置模块 用于日志记录。
lambda表达式
类似js匿名函数
分析
这段代码使用Python的logging模块创建了一个名为"xformers"的日志记录器,并添加了一个过滤器。过滤器使用lambda函数来过滤掉包含特定错误消息的日志记录。
具体来说,过滤器的作用是对每条日志记录执行lambda函数,并根据函数返回值来决定是否保留该条记录。在这个例子中,lambda函数检查日志记录的消息是否包含字符串"A matching Triton is not available"。如果消息中包含该字符串,则lambda函数返回False,表示该记录应该被过滤掉;反之,如果消息中不包含该字符串,则lambda函数返回True,表示该记录应该保留。
具体不知道为什么加这段代码,先继续向后看
第二段代码
if __name__ == "__main__":
if cmd_opts.nowebui:
api_only()
else:
webui()
分析
每个python模块都包含内置的变量_name_。_name_ 就是当前文件,
_main_ 等于当前执行文件的名称
不知道为什么 _main_ 要加 “”,按理来说下面的写法才是正确的
if __name__ == __main__:
if cmd_opts.nowebui:
api_only()
else:
webui()
开始copy
新建webui.py
import logging
logging.getLogger("xformers").addFilter(lambda record:"A mathing Triton is not available" not in record.getMessage())
def webui():
print('webui')
if __name__ == "__main__":
print(__name__)
webui()
直接运行 webui.py 文件
__main__
webui
和想想的不一样,按理来说打印的应该是webui.py或者webui字符串
再新建个shared.py 文件
shared.py
import argparse
parser = argparse.ArgumentParser()
cmd_opts = parser.parse_args()
print('shared:',__name__)
webui.py改一下 引入 shared.py
import logging
### 暂时不知道啥有卵用
logging.getLogger("xformers").addFilter(lambda record: "A mathing Triton is not available" not in record.getMessage())
### 引入 shared文件
from modules.shared import cmd_opts
def webui():
print('webui')
if __name__ == "__main__":
print(__name__)
webui()
运行打印结果
shared: modules.shared
__main__
webui
总结下
__ name __ 如果是在运行的当前文件输出 就是返回 __ main __ 字符串,否则就是对应的 文件夹和文件名用.组合的字符串,不是单纯的文件名