16.odoo入门——初探后台启动过程(三)

2023-11-18

第16天——终于周五,迎来难得的双休

上次说到,运行如下代码:

 rc = odoo.service.server.start(preload=preload, stop=stop)#————又调用了odoo/service/server.py下的start函数啦  
去到 odoo10/odoo/service/server.py 下查看定义的一个全局函数:

def start(preload=None, stop=False):
    """ Start the odoo http server and cron processor.
    """
    global server  #使用全局变量 server
    load_server_wide_modules() #加载openerp的一些模块
    if odoo.evented:
        server = GeventServer(odoo.service.wsgi_server.application)
    elif config['workers']:
        server = PreforkServer(odoo.service.wsgi_server.application)
    else:
        server = ThreadedServer(odoo.service.wsgi_server.application)

    watcher = None
    if 'reload' in config['dev_mode']:
        if watchdog:
            watcher = FSWatcher()
            watcher.start()
        else:
            _logger.warning("'watchdog' module not installed. Code autoreload feature is disabled”)
    if 'werkzeug' in config['dev_mode']:
		
        server.app = DebuggedApplication(server.app, evalex=True)

    rc = server.run(preload, stop)

    # like the legend of the phoenix, all ends with beginnings
    if getattr(odoo, 'phoenix', False):
        if watcher:
            watcher.stop()
        _reexec()

    return rc if rc else 0


这样吧,我们按照函数运行流程,从上往下依次进行分析,

global server  #使用了全局变量server.

在该文件上下文中可以看到,server = None , 是一个空对象

接下来调用该文件中的一个全局函数:load_server_wide_modules

其函数源码为:

def load_server_wide_modules():
    for m in odoo.conf.server_wide_modules:
        try:
            odoo.modules.module.load_openerp_module(m)
        except Exception:
            msg = ''
            if m == 'web':
                msg = """
The `web` module is provided by the addons found in the `openerp-web` project.
Maybe you forgot to add those addons in your addons_path configuration."""
            _logger.exception('Failed to load server-wide module `%s`.%s', m, msg)
通过嵌套了这个
print "in load_server_wide_modules  ",m
  这条测试语句,看到odoo.conf.server_wide_modules 2 个对象,分别为web web_kanban

接下来运行了odoo.modules.module.load_openerp_module(m)函数,找到odoo/modules/module.py下的load_openerp_module函数,这是个全局函数:

def load_openerp_module(module_name):
    """ Load an OpenERP module, if not already loaded.

    This loads the module and register all of its models, thanks to either
    the MetaModel metaclass, or the explicit instantiation of the model.
    This is also used to load server-wide module (i.e. it is also used
    when there is no model to register).
    """
    global loaded    #全局变量loaded是一个列表,存储着已经load的模块
    if module_name in loaded:  #如果已经加载就不用再加载了,直接return
        return

    initialize_sys_path() #初始化路径
    try:
        __import__('odoo.addons.' + module_name)

        # Call the module's post-load hook. This can done before any model or
        # data has been initialized. This is ok as the post-load hook is for
        # server-wide (instead of registry-specific) functionalities.
        info = load_information_from_description_file(module_name)
        if info['post_load']:
            getattr(sys.modules['odoo.addons.' + module_name], info['post_load'])()

    except Exception, e:
        msg = "Couldn't load module %s" % (module_name)
        _logger.critical(msg)
        _logger.critical(e)
        raise
    else:
        loaded.append(module_name)

也就是说load_openerp_module 这个函数大概就是找找路径,确认加载我们需要加载的模块。

接下来选择服务器模式,我们这里是进入了 ThreadedServerThreadedServer是在odoo/service/server.py下声明的一个类,主要用于管理线程

使用watcher,可以实现Code autoreload,不过在我现行使用中并没有配置reload这个功能,因为可以发现我的odoo中的config[‘dev’]是空的。

进入

rc = server.run(preload, stop)
  语句———服务器启动啰。

接下来的几条代码行都是有关服务器退出的啦。下一次我们将观察一下这个ThreadedServer是如何实现线程管理的吧!


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

16.odoo入门——初探后台启动过程(三) 的相关文章

  • 2018年最常见的Python面试题&答案(上篇)

    Q 1 Python有哪些特点和优点 作为一门编程入门语言 Python主要有以下特点和优点 可解释 具有动态特性 面向对象 简明简单 开源 具有强大的社区支持 当然 实际上Python的优点远不止如此 可以阅读该文档 详细了解 https
  • ubuntu安装svn服务器

    安装命令 sudo apt getinstall subversion 创建项目目录 sudo mkdir home svn cd home svn project sudo chmod R777 project 创建svn仓库 sudo
  • rbac 另外一种逃逸

    Privilege Escalation from Node Proxy Rights in Kubernetes RBAC aquasec com
  • mysql时间相减-时间运算-转换毫秒值的问题

    mysql时间运算 一 时间相减发现与结果差距很大 二 原因 三 正确的运算 一 时间相减发现与结果差距很大 mysql gt select t1 t2 t2 t1 from mytest t1 t2 t2 t1 2013 04 21 16
  • Spring4学习笔记:Spring框架中为一个bean配置依赖注入的方式

    Spring框架为一个bean配置依赖注入的四种方式 属性注入 构造方法注入 工厂注入 泛型依赖注入 1 属性注入 属性方法注入利用setXxx 方法注入 Bean 的属性值或者依赖对象 由于属性注入方式具有可选择性和灵活性高的优点 因此属
  • 【算法】深度优先搜索DFS 入门:基本知识+经典例题

    DFS最重要的是理清搜索顺序 ps 这是我入门dfs时写的博客 后来dfs渐渐熟练了 也补充了一些题目上去 带原题和代码 个人感觉整篇博文从上到下确实由易到难 代码也由开始的冗长变得渐渐精简 自学DFS看的视频 小甲鱼 讲原理 青岛大学 王
  • Linux / pthread_create() 函数所使用的线程函数为什么必须是静态函数?

    答案 因为 pthread create 函数要求的线程函数必须满足如下格式 void ThreadFunc void args 对于普通类成员函数 虚函数 他们实际上都是包含了调用他们的对象的 this 指针 即 经过编译器优化 线程函数
  • 【华为OD机试真题】对称字符串(C++&java&python)100%通过率 超详细代码注释 代码解读

    华为OD机试真题 2022 2023 真题目录 点这里 华为OD机试真题 信号发射和接收 试读 点这里 华为OD机试真题 租车骑绿道 试读 点这里 对称字符串 时间限制 1s空间限制 256MB限定语言 不限 题目描述 对称就是最大的美学
  • Period 【HDU - 1358】【KMP求周期】

    学习KMP算法可以参阅这篇文章 不懂的可以在线回答 题目链接 题意 我们想知道一串字符中的前缀中有多少最大周期数 例如 aaa 中 前两个 aa 最小周期长度为 a 所以周期长度为2 前三个 aaa 的最小周期也是 a 所以周期长度为3 再
  • 景深概念、计算方法与影响因素

    一 景深概念 景深 Depth of Field DOF 是指在摄影机镜头或其他成像器前沿能够取得清晰图像的成像所测定的被摄物体前后距离范围 而光圈 镜头 及拍摄物的距离是影响景深的重要因素 在聚焦完成后 焦点前后的范围内所呈现的清晰图像
  • caffe cudnn出现错误: declaration is incompatible with "const char *cudnnGetErrorString(cudnnStatus_t)"

    cudnn h中 inline const char cudnnGetErrorString cudnnStatus t status 修改为 inline const char CUDNNWINAPI cudnnGetErrorStrin
  • wallpaper Engine 安装教程

    今天在网上看到了一个软件wallpaper Engine 效果太酷炫了 就买了个来试试 效果是很棒 但是缺点是无法和桌面管理工具兼容 例如Fences 如果要二者兼得 则必须要PS辅助 运行环境 Windows7 Wallpaper Eng
  • GeckoDriver 国内镜像源加速下载

    GeckoDriver 国内镜像源加速下载 https mirrors huaweicloud com geckodriver
  • FastAPI从入门到实战(4)——路径参数与数值校验

    简单记录路径参数的类型 错误检查 自动填充 数据转换 解析 验证 包括数字大小范围的验证 参数别名 API 交互文档中传参演示等内容 一个伪静态请求 app01 get stu01 parameters def path params01
  • 模拟电子技术

    模电 半导体器件 二极管 1 半导体的基础知识 2 半导体二极管 场效应管三极管及其放大电路 1 绝缘栅型场效应管 MOSFET 2 结型场效应管 JFET 3 场效应管的主要参数 场效应管 放大电路 基本放大电路 差分式放大电路 集成运算
  • vue3 + gzip +nginx 部署 静态文件被识别成text/html的问题

    Failed to load module script Expected a JavaScript module script but the server responded with a MIME type of text html
  • java:面向对象(多态的主板示例)。

    需求 电脑运行实例 电脑运行基于主板 我们写这样一个代码 class MainBoard public void run System out println mainboard run class DuoTaiDemo4 public s
  • 玩转格式转换——.xml->.txt

    一个帅气的boy 你可以叫我 loVe 个人主页 l Ve的个人主页 如果对你有帮助的话希望三连 支持一下博主 VOC数据集转YOLO数据集 1 前言 2 分析xml txt数据 3 转换过程 4 最后结果对比 1 前言 最近学习Yolo
  • 友元成员函数使用时的注意事项

    友元成员函数的注意事项 友元的概念 友元 的概念其实是针对于类的私有成员来说的 一个类的由于封装的缘故 类体中私有成员是不可以被外界访问的 无论是继承也好 都是无法访问类内私有成员的 但是正是有那么一些人 愿意打破陈规破例访问类体内的私有成
  • linux下c/c++开发工具集

    clang llvm组合 lldb debugger 代码补全vim clang complete linux开发花环境 vim eclipse kscope kate kdevelop emacs win虚拟机 source insigh

随机推荐

  • Python excel数据处理之公式---openpyxl

    有些时候excel中直接通过公式进行计算比较方便 这样会比较简洁 并且下面代码也解决了excel读取单元格内容时 通过公式计算的值 为None的问题 咱们废话不多说 直接上代码 import sys import openpyxl from
  • element-ui 通过变量修改默认样式

    项目用的是 element ui vue 项目里有个需求是要修改 element 消息提示组件中 warning 类型的背景色和那个小感叹号的背景色 有两种方式 第一种比较简单 用 F12 找到想要修改的元素 直接覆盖对应样式 但考虑到有时
  • 机械臂控制C语言程序,ROS机械臂开发:MoveIt!编程

    一 编程接口 提供C Python GUI 命令行等接口 move group节点 Python和C 接口示例 MoveIt关注更多的是plan工作 后面的execute需要控制器执行 MoveIt只是监控功能 编程步骤 连接控制需要的规划
  • Qt中LineEdit、TextEdit 、PlainTextEdit三个控件的区别

    Qt中LineEdit TextEdit PlainTextEdit这三个控件区别为 输入格式不同 用途不同 限制行数不同 一 输入格式不同 1 LineEdit LineEdit的输入格式为单行文本输入 2 TextEdit TextEd
  • 亚马逊云aws12个月免费服务器搭建小结 (

    转载自 http blog sina com cn s blog 53a30a3b0101hdx9 html 本文小结了在亚马逊aws Amazon Web Services 云计算服务上注册一个免费的服务器的方法和一些注意事项 郑重申明
  • java中string与json互相转化

    在Java中socket传输数据时 数据类型往往比较难选择 可能要考虑带宽 跨语言 版本的兼容等问题 比较常见的做法有两种 一是把对象包装成JSON字符串传输 二是采用java对象的序列化和反序列化 随着Google工具protoBuf的开
  • 数据结构实验1-顺序表-各种操作

    要求 创建两个顺序表实现两个顺序表的合并以及扩容 以及单个顺序表的查找 插入 删除 排序 清空 销毁 查找前驱以及后继等等 有错会继续改的 以及程序的完备性 健壮性 可读性等等 经过这次实验感觉我写的最多的不是程序而是告诉程序执行者下一步该
  • C语言程序设计(张玉生)第四章课后习题编程(分支结构程序设计)

    1 编写程序 输入一个整数 判断它是奇数还是偶数 并输出判断结果 include
  • [学习笔记] EL 使用EL表达式获得作用域属性

    采用EL表达式 对于属性的访问的隐含访问顺序是 pageContext httpServletRequest HttpSession ServletContext 通过以下实例 来说明 servlet scopeVar java impor
  • ADS系列 - RLC器件滤波器设计教程1

    相关文章 ADS SystemVue 文章集合页 ADS系列 定向耦合器设计教程1 ADS系列 混频器设计 混频器原理介绍及仿真1 ADS系列 低噪声放大器 LNA 模型下载安装及 LNA仿真设计 Keysight的 SystemVue 介
  • Spring+Redis 存入Key Value 乱码前缀

    今天试着在项目中读写redis对象 发现全是乱码 如下图所示 而后在网上找了些资料 才知道是序列化问题 目前已解决谨此记录 以防再犯 ApplicationContext context new ClassPathXmlApplicatio
  • 机房软件管理服务器及系统软件,高校机房软件自动化部署管理系统的设计及实现...

    摘要 随着我国高等学校计算机教育的飞速发展 计算机作为一种重要的信息化工具受到越来越大的重视 计算机在各个学科中也发挥着越来越重要的作用 现在计算机在高校中是公共必修课 而且开设了更多的计算机应用专业课 高等院校计算机机房的规模也越来越大
  • 使用WireShark协议分析仪来分析ICMP与FTP协议

    这是网络第2次试验 wireshark分析仪网站 http www wireshark org 了解ICMP协议 ICMP Internet Control Message Protocol 网际报文控制协议 是Internet协议族的核心
  • python中 r什么意思_python中w、r指的是什么意思

    python中w r指的是什么意思 发布时间 2020 11 20 10 54 44 来源 亿速云 阅读 100 作者 小新 这篇文章将为大家详细讲解有关python中w r指的是什么意思 小编觉得挺实用的 因此分享给大家做个参考 希望大家
  • Ubuntu安装GMP库、PBC library

    历时一周终于安装完成 期间犯了太多错误 都是一点一点查的 Pbc library 库的安装依赖于如下四个文件 GMP Library M4 flex bison 其中在Linux系统中 M4 flex bison 均可以通过 apt get
  • 为什么Precision高Recall就低——F1 score

    梳理一下公式 sensitivity recall Precision和Recall虽然从计算公式来看并没有什么必然的相关性关系 但是 在大规模数据集合中 这2个指标往往是相互制约的 理想情况下做到两个指标都高当然最好 但一般情况下 Pre
  • 什么是护网(HVV)?需要什么技能?

    HVV介绍 1 什么是护网 护网的定义是以国家组织组织事业单位 国企单位 名企单位等开展攻防两方的网络安全演习 进攻方一个月内采取不限方式对防守方展开进攻 不管任何手段只要攻破防守方的网络并且留下标记即成功 直接冲到防守方的办公大楼 然后物
  • git软件代码提交详解

    git提交代码流程 git提交代码时 不能把代码直接提交到master分支 需要切换到一个子分支 然后把要提交的代码上传到子分支 然后将子分支合并到master分支上 提交步骤 1 创建并切换到子分支 git checkout b 子分支名
  • Linux软硬链接的区别

    1 概念 软链接 软链接又叫符号链接 这个文件包含了另一个文件的路径名 可以是任意文件或目录 可以链接不同文件系统的文件 硬链接 就是一个文件的一个或多个文件名 硬链接就是让多个不在或者同在一个目录下的文件名 同时能够修改同一个文件 其中一
  • 16.odoo入门——初探后台启动过程(三)

    第16天 终于周五 迎来难得的双休 上次说到 运行如下代码 rc odoo service server start preload preload stop stop 又调用了odoo service server py下的start函数